如何在 ASP.NET Web API 中设置下载文件名 ?
生活随笔
收集整理的這篇文章主要介紹了
如何在 ASP.NET Web API 中设置下载文件名 ?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
咨詢區
Tae-Sung Shin:
在我的 ApiController 類中,有一個下載文件的Action方法,代碼如下:
public?HttpResponseMessage?Get(int?id) {try{string?dir?=?HttpContext.Current.Server.MapPath("~");?//location?of?the?template?fileStream?file?=?new?MemoryStream();Stream?result?=?_service.GetMyForm(id,?dir,?file);if?(result?==?null){return?Request.CreateResponse(HttpStatusCode.NotFound);}result.Position?=?0;HttpResponseMessage?response?=?new?HttpResponseMessage();response.StatusCode?=?HttpStatusCode.OK;response.Content?=?new?StreamContent(result);return?response;}catch?(IOException){return?Request.CreateResponse(HttpStatusCode.InternalServerError);} }代碼運行是沒有任何問題的,有一點不爽的是每次下載的文件名都是一串id,導致用戶每次在對話框中保存的時候都需要修改成語義化的名字,我的想法是能不能在 API 端直接設置成默認名字呢?
回答區
Darin Dimitrov:
這個很簡單,在 HttpResponseMessage 的 header 中設置一下 Content-Disposition 即可,參考如下代碼:
HttpResponseMessage?response?=?new?HttpResponseMessage(); response.StatusCode?=?HttpStatusCode.OK; response.Content?=?new?StreamContent(result); response.Content.Headers.ContentDisposition?=?new?ContentDispositionHeaderValue("attachment") {FileName?=?"foo.txt" };sorenhk:
只要確保你的文件名是一個正確編碼的格式,而且你也不想用 WebApi 的 HttpResponseMessage 的話,推薦直接設置 Response, 參考如下代碼:
Response.AddHeader("Content-Disposition",?new?System.Net.Mime.ContentDisposition("attachment")?{?FileName?=?"foo.txt"?}.ToString());或者這樣:
Response.Headers.Add("Content-Disposition",?$"attachment;?filename={myFileName}");點評區
這種需求在 webapi 開發中還是蠻容易遇到的,不管什么途徑最終都是設置 Content-Disposition,學習了。
總結
以上是生活随笔為你收集整理的如何在 ASP.NET Web API 中设置下载文件名 ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net Core with 微服务 -
- 下一篇: Win11代言人官宣