問題:
嘗試在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 視為模型,因為它是因為它是個框架將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中文網其他相關文章!