問題:
ASP.Net Core Web API でファイルを返そうとしたときASP.Net Core Web API コントローラーでは、HttpResponseMessage はファイルとしてではなく、アプリケーション/json コンテンツ ヘッダーを含む JSON として返されます。
コード試行:
public async Task<HttpResponseMessage> DownloadAsync(string id) { var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new StreamContent({{__insert_stream_here__}}); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return response; }
原因:
HttpResponseMessage は、[HttpGet] 属性で修飾されたアクションから返されているため、Web API フレームワークによってモデルとして扱われています。
解決策:
ファイルを正しく返すには、IActionResult を返すようにコントローラーのアクションを変更します:
[Route("api/[controller]")] public class DownloadController : Controller { //GET api/download/12345abc [HttpGet("{id}")] public async Task<IActionResult> Download(string id) { Stream stream = await {{__get_stream_based_on_id_here__}}; if(stream == null) return NotFound(); // returns a NotFoundResult with Status404NotFound response. return File(stream, "application/octet-stream", "{{filename.ext}}"); // returns a FileStreamResult } }
注:
フレームワークは、応答が完了した後、使用されたストリームを破棄します。応答が送信される前に using ステートメントを使用してストリームを破棄すると、例外または破損した応答が発生します。
以上がASP.Net Core Web APIでJSONの代わりにファイルを返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。