Asp.net-Mvc
Web API 返回 csv 文件
我需要從 web api 控制器獲取一個 csv 文件。我無法顯示“另存為”對話框。頁面上僅顯示文本輸出。我都試過了,從 jquery 呼叫 Export 和普通的舊 html
控制器:
[System.Web.Http.HttpGet] public HttpResponseMessage Export() { StringBuilder sb = new StringBuilder(); IEnumerable<CustomerDiscount> list = this.subscriberRepository.GetSubscribers(); foreach (CustomerDiscount item in list) { sb.AppendFormat( "{0};{1};{2};", item.CustomerName, item.CustomerNumber, Environment.NewLine); } MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write(sb.ToString()); writer.Flush(); stream.Position = 0; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" }; return result; }編輯:添加了這一行:
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" };還是不行
我這樣稱呼它:
<a id="export" href="/Relay/Billing/Export" class="btn btn-primary">Export</a>並且還嘗試過這樣的:
$("#export").click(function () { $.post("/Relay/Billing/Export", { type: $("#discountType").val() }) .done(function (data) { }); });仍然沒有另存為框
我不知道這是否是正確的協議,但這是我之前的做法。因此,您有一個網頁,您將從該網頁呼叫一個 API,該 API 將響應該文件,並且它應該由瀏覽器的另存為對話框處理。
的HTML:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> function save() { window.open('http://localhost:45719/api/home?id=12', '_blank', ''); } </script> </head> <body> <a class="btn btn-primary" onclick="save()">Export</a> </body> </html>那個行動:
public HttpResponseMessage Get(int id) { MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter(stream); writer.Write("Hello, World!"); writer.Flush(); stream.Position = 0; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "Export.csv" }; return result; }這在最新的 Chrome 和 Firefox 中都適用於我。