在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();
但是,我不相信所做的任何修改都会解决问题。
答案 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