Asp.net-Mvc

Web API 返回 csv 文件

  • April 29, 2015

我需要從 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 中都適用於我。

引用自:https://stackoverflow.com/questions/29948809