问题:
尝试在 ASP.Net Core Web API 中返回文件时ASP.Net Core Web API 控制器,HttpResponseMessage 以带有 application/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; }
原因:
Web API 框架将 HttpResponseMessage 视为模型,因为它是从用 [HttpGet] 属性修饰的操作返回的。
解决方案:
要正确返回文件,请修改控制器操作以返回 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中文网其他相关文章!