间歇性错误 - IE6在浏览器中将文件显示为文本,而不是文件下载

时间:2010-12-30 11:25:21

标签: asp.net webforms download

在ASP.NET WebForms 2.0站点中,我们遇到IE6中的间歇性错误,其中文件下载尝试导致直接在浏览器中显示的内容为文本,而不是显示的文件保存对话框。我们的应用程序允许用户下载PDF和CSV文件。

我们使用的代码是:

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Disposition", "attachment;filename=\"theFilename.pdf\"");
response.ContentType = "application/pdf";
response.BinaryWrite(MethodThatReturnsFileContents());
response.End();

这是从按钮服务器控件的代码隐藏点击事件处理程序调用的。

这种方法我们在哪里出错?

修改

在James回复此帖子之后,我现在使用的代码如下所示:

HttpResponse response = HttpContext.Current.Response;
response.ClearHeaders();
// Setting cache to NoCache was recommended, but doing so results in a security
// warning in IE6
//response.Cache.SetCacheability(HttpCacheability.NoCache);
response.AppendHeader("Content-Disposition", "attachment; filename=\"theFilename.pdf\"");
response.ContentType = "application/pdf";
response.BinaryWrite(MethodThatReturnsFileContents());
response.Flush();
response.End();

但是,我不相信所做的任何修改都会解决问题。

1 个答案:

答案 0 :(得分:1)

通过支持IE6,你的回答是错误的。

Response.Clear仅清除回复中的内容,而是使用Response.ClearHeaders

除此之外,您可能希望使用Response.Buffer& Response.Flush并明确设置

Response.Cache.SetCacheability(HttpCacheability.NoCache);

就我个人而言,我可能希望将内容长度和字符集添加到我的标题中,因为浏览器必须处理的信息越多越好。

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.aspx