在ASP.NET Web API中正确返回文件
在ASP.NET MVC中,使用FileContentResult
类返回文件非常简单。然而,在使用WebAPI时,方法有所不同。
适应WebAPI
WebAPI使用不同的约定,需要不同的返回类型。要将普通MVC控制器的Test
方法改编为API控制器,我们需要返回IHttpActionResult
而不是FileContentResult
。
初始尝试及问题
最初的尝试使用StreamContent
类返回文件流。虽然设置了内容类型和长度,但浏览器中只显示了标头。
解决方案:ByteArrayContent
问题在于StreamContent
不适用于已经从流中读取的内容。相反,我们应该使用ByteArrayContent
,它以流的字节数组作为输入。
修改后的代码:
<code class="language-csharp">[HttpGet] public HttpResponseMessage Generate() { var stream = new MemoryStream(); // 处理流。 var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(stream.ToArray()) }; result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "CertificationCard.pdf" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; }</code>
此修改后的代码正确地将文件内容作为响应返回,允许在浏览器中下载或显示。
以上是如何在 ASP.NET Web API 中正确返回文件?的详细内容。更多信息请关注PHP中文网其他相关文章!