问题描述
我想在我的 ASP.Net Web API 控制器中返回一个文件,但我所有的方法都将 HttpResponseMessage
作为 JSON 返回.
I want to return a file in my ASP.Net Web API Controller, but all my approaches return the HttpResponseMessage
as 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
作为 JSON 返回,并将 HTTP 内容标头设置为 application/json
.
When I call this endpoint in my browser, the Web API returns the HttpResponseMessage
as JSON with the HTTP Content Header set to application/json
.
推荐答案
如果这是 ASP.net-Core,那么您正在混合 Web API 版本.让操作返回派生的 IActionResult
,因为在您当前的代码中,框架将 HttpResponseMessage
视为模型.
If this is ASP.net-Core then you are mixing web API versions. Have the action return a derived IActionResult
because in your current code the framework is treating HttpResponseMessage
as a model.
[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"); // returns a FileStreamResult
}
}
注意:
当响应完成时,框架将处理在这种情况下使用的流.如果使用 using
语句,流将在响应发送之前被释放,并导致异常或损坏响应.
这篇关于在 ASP.Net Core Web API 中返回文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!