ASP.NET Web API でファイルを正しく返します
ASP.NET MVC では、FileContentResult
クラスを使用するとファイルを返すのが非常に簡単です。ただし、WebAPI を使用する場合はアプローチが異なります。
WebAPI への適応
WebAPI は異なる規則を使用し、異なる戻り値の型を必要とします。通常の MVC コントローラーの Test
メソッドを API コントローラーに適合させるには、IHttpActionResult
の代わりに FileContentResult
を返す必要があります。
最初の試みと問題
最初の試行では、StreamContent
クラスを使用してファイル ストリームを返しました。コンテンツのタイプと長さは設定されていますが、ブラウザーにはヘッダーのみが表示されます。
解決策: ByteArrayContent
問題は、StreamContent
がストリームから既に読み取られたコンテンツでは機能しないことです。代わりに、ストリームのバイト配列を入力として受け取る ByteArrayContent
を使用する必要があります。
変更されたコード:
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { var stream = new MemoryStream(); // 处理流。 var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.ToArray()) }; result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; }</code>
この変更されたコードは、ファイルの内容を応答として正しく返し、ダウンロードまたはブラウザーでの表示を可能にします。
以上がASP.NET Web APIでファイルを適切に返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。