为什么Content-Disposition标头在IE 8中不起作用?

Pro*_*ofK 3 asp.net

我正在尝试将文本文件(CSV)流式传输到响应,并且以下代码在Firefox 3中完美运行,但是当我使用IE时,看起来它想要下载实际的.aspx页面,并抱怨该文件内容与文件扩展名或类型不匹配.如果我然后选择下载文件,它会正确下载CSV数据并在Excel中打开它.我究竟做错了什么?

    DataTable dt = ExtensionsProvider.ListPrivateCallCostsForCsv(reportFilter.BusinessUnit, reportFilter.StartDate,
                                                             reportFilter.EndDate);
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName()); 
    DataTableHelper.WriteCsv(dt, Response.Output, false);
    Response.End();
Run Code Online (Sandbox Code Playgroud)

bob*_*nce 9

Response.AddHeader("Content-Disposition", "filename=" + GetExportFileName());
Run Code Online (Sandbox Code Playgroud)

应该:

Response.AddHeader("Content-Disposition", "attachment;filename=" + GetExportFileName());
Run Code Online (Sandbox Code Playgroud)

没有主Content-Disposition值,IE将只使用URL的尾部  something.aspx - 作为文件名.

(上面假设GetExportFileName()返回一个被删除大多数标点符号的清理文件名.在IE中使用标题参数作为标记或带引号的字符串是一个令人烦恼的问题 ;有关详细信息,请参阅此问题)