我需要在HTTP响应中发送一个CSV文件。如何将输出响应设置为CSV格式?

这是行不通的:

Response.ContentType = "application/CSV";

当前回答

在ASP.net MVC中,你可以使用FileContentResult和File方法:

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}

其他回答

根据RFC 4180, CSV的MIME类型为text/ CSV。

使用text/csv是最合适的类型。

您还应该考虑向响应中添加Content-Disposition报头。通常,一个文本/csv文件会被Internet Explorer直接加载到Excel的托管实例中。这可能是一个理想的结果,也可能不是。

Response.AddHeader("Content-Disposition", "attachment;filename=myfilename.csv");

上述操作将导致出现一个文件“另存为”对话框,这可能是你想要的。

我发现IE的问题是,它嗅探返回数据,并对它认为已经发送的内容类型做出自己的判断。这导致了许多副作用,例如总是打开文本文件的saveAs对话框,因为您正在使用数据传输的压缩。解决方案是(在php代码中)......

header('X-Content-Type-Options: nosniff');

如上所述设置内容类型和内容配置会在不同的浏览器中产生截然不同的结果:

IE8:按需要保存对话框,Excel为默认应用程序。100%好。

Firefox:保存对话框确实显示,但Firefox不知道它是一个电子表格。建议用Visual Studio打开它!50%的好

Chrome:提示完全被忽略。CSV数据显示在浏览器中。0%的好。

当然,在所有这些情况下,我指的是浏览器,因为它们没有自定义的mime/应用程序映射。

在ASP.net MVC中,你可以使用FileContentResult和File方法:

public FileContentResult DownloadManifest() {
    byte[] csvData = getCsvData();
    return File(csvData, "text/csv", "filename.csv");
}