除了浏览器(Chrome)不尝试下载 .csv 文件或向用户提供下载框外,我正试图准确地实现这个问题中的海报试图做的事情。我正在使用 HTTP GET 请求,并且上面问题中的代码几乎相同。我正在使用 Fiddler 来监控流量,我可以在响应中看到 .csv 文件流,但浏览器似乎忽略了它,我不知道为什么......
这是我目前的实现(基于@MattThrower 的问题):
我对 MVC 控制器进行 AJAX 调用:
$("#exportToCsvLink").click(function () {
$.ajax({
type: "GET",
url: window.project.common.routes.urls.ExportChartDataToCsv,
data: { parameterId: parameter.parameterId }
});
});
MVC 控制器处理 CSV 导出并返回一个FileStreamResult
public FileStreamResult ExportChartDataToCsv(int parameterId)
{
List<TestViewModel> data = _CommonService.GetData(parameterId);
var result = WriteCsvToMemory(data);
var memoryStream = new MemoryStream(result);
return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
}
public byte[] WriteCsvToMemory(IEnumerable<TestViewModel> data)
{
using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords(data);
streamWriter.Flush();
return memoryStream.ToArray();
}
}