Javascript 作为单个字符串返回的CSV文件

Javascript 作为单个字符串返回的CSV文件,javascript,.net,angularjs,Javascript,.net,Angularjs,以下是相关代码: 控制器: public ActionResult APIDownloadCSV() { var filename = Server.MapPath("~/xxx/test.csv"); byte[] content = System.IO.File.ReadAllBytes(filename); return File(content, "text/csv", "test.csv"); } Javascript: var fetchCSV = func

以下是相关代码:

控制器:

public ActionResult APIDownloadCSV()
{
    var filename = Server.MapPath("~/xxx/test.csv");
    byte[] content = System.IO.File.ReadAllBytes(filename);
    return File(content, "text/csv", "test.csv");
}
Javascript:

var fetchCSV = function () {
    return postDownloadCsv().then(function (data) {
        var hiddenElement = document.createElement("a");
        hiddenElement.href = "data:text/csv;charset=utf-8," + data;
        hiddenElement.target = "_blank";
        hiddenElement.download = "test.csv";
        hiddenElement.click();
        hiddenElement.remove();
    });
}
postDownloadCSV
只是一个简单的一行
$http.post
函数,用于正确的URL

问题:

当我使用上面的代码时,文件作为CSV下载,但只作为单个连续字符串返回。但是,当我直接将URL发布到浏览器的位置栏时,正在下载的文件被正确解析。我尝试过操纵标题,以便请求
text/csv
,但它不起作用。出于各种原因,我不能在客户端使用解析器来解决这个问题(无论如何,我也不想这么做。该文件在服务器上完全正常。只需下载即可。)


我想问题出在客户端,因为我可以通过URL下载文件,但是在哪里?我的
$http.post是否有问题?

在设置链接之前,请尝试对链接的href进行编码

hiddenElement.href = encodeURI("data:text/csv;charset=utf-8," + data);

正在工作的js fiddle:

你知道什么,这是一个困扰我好几个小时的问题的简单解决方案!非常感谢。一个当之无愧的接受。