ASP.NET Web API から PDF ファイルを返す
標準の MVC コントローラーでは、FileContentResult
を使用して PDF を返すのは簡単です。 ただし、ApiController
には別のアプローチが必要です。
問題
IHttpActionResult
で一般的な ApiController
戻り値の型を使用すると、PDF を返すときに問題が発生します。 いくつかの例が示すように、単純に StreamContent
を返すと、多くの場合、ブラウザーは PDF ファイル自体ではなくヘッダーを表示します。
正しい方法
重要なのは、ByteArrayContent
の代わりに StreamContent
を使用することです。これにより、ストリーム データが適切に送信できるようにバイト配列に変換されます。 改良された例を次に示します:
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { MemoryStream stream = new MemoryStream(); // ... PDF generation code to populate the stream ... HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.ToArray()) }; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; }</code>
このコードは ByteArrayContent
を使用して PDF をバイト配列として送信します。 重要なのは、ContentDisposition
ヘッダーを attachment
に設定し (ファイルをダウンロードするようにブラウザーに指示します)、ContentType
を application/octet-stream
に設定します (バイナリ ファイルを示します)。 これにより、PDF がブラウザでレンダリングされるのではなく、正しくダウンロードされるようになります。
以上がASP.NET Web API から FileContentResult (PDF) を返す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。