在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中文網其他相關文章!