2017-12-12 6 views
1

は、私は、次のHTTPGET機能を持っている:HttpHeadは、ASP.NETで私のASP.NETコアコントローラでは、コア

[HttpGet("[action]")] 
[HttpHead("[action]")] 
[ResponseCache(NoStore = true)] 
public async Task<IActionResult> GetProofPdf(long studentid) 
{ 
    var rawPdfData = await _studentLogic.StudentPdfAsync(User, studentid); 
    if (Request.Method.Equals("HEAD")) 
    { 
    Response.ContentLength = rawPdfData.Length; 
    return Json(data: ""); 
    } 
    else 
    { 
    return File(rawPdfData, "application/pdf"); 
    } 
} 

これはうまく動作しません。返されたファイルオブジェクトは、ブラウザから保存できます。唯一の問題は、PDFをIEに埋め込むことです。 IEは最初にHEADリクエストを送信します。 HEAD要求が失敗するので、IEはPDFを取得しようとしません。他のブラウザは、HEADが失敗したときには、HEADを送信せず、GETを使用しますが、IEでは失敗します。

私はサポートIEをしたいので、HEADアクションを作成します。単にHEADのためにコンテンツが空でなければならないからです( "HEADメソッドはGETと同じですが、サーバが応答のメッセージ本体を返してはならないことを除いてはいけません")。[HttpHead("[action]")]は機能しません。

したがって、ASP.NETコアでHttpHead-Verb-Functionを作成するにはどうすればよいですか?空のコンテンツを返すにはどうすればよいですか?コンテンツの長さは正しいですか?

答えて

0

これらの行に沿って何かがうまくいくはずです。

[HttpGet] 
    [HttpHead] 
    [ResponseCache(NoStore = true)] 
    public async Task<IActionResult> GetProofPdf(long studentid) 
    { 
     if (Request.Method.Equals("HEAD")) 
     { 
      //Calculate the content lenght for the doc here? 
      Response.ContentLength = $"You made a {Request.Method} request".Length; 
      return Json(data: ""); 
     } 
     else 
     { 
      //GET Request, so send the file here. 
      return Json(data: $"You made a {Request.Method} request"); 
     } 
    } 
+0

ありがとうございます! HEADが呼び出されますが、PDFを埋め込むことはまだ機能しません。 'return Json(data:" ");'は空ではないと思いますか?ソースの例を更新しました。 – Sam

+2

@Sam実際にはいくつかのデータを返していますが、Jsonの代わりにreturn Ok()を使ってみてください(data: ""); –

+0

返品OK()、ありがとう! – Sam

関連する問題