最近我们遇到了使用C#4.0开发的文件下载http处理程序的奇怪问题。
Web应用程序是使用ASP.NET 4.0开发的,并通过ssl托管在IIS 7.0上。它工作正常。但最近由于其他一些变化,在配置或网站中我们面临下面列出的问题。
当我们下载文本文件时,它会发出垃圾数据。如果我在aspx页面上使用代码而不是处理程序,相同的文件工作正常。两者都有相同的代码。一些文件工作正常。例如图像文件或PDF文件工作正常。但是对于文本文件,行为非常不一致。空白文本文件工作正常。我尝试比较两个响应(handler vs codebehind
),似乎返回的内容长度不同。
context.Response.Clear();
context.Response.ClearHeaders();
context.Response.ClearContent();
context.Response.ContentType = !String.IsNullOrEmpty(mime) ? mime : "application/octet-stream";
context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", fileName));
//context.Response.AppendHeader("Content-Length", buffer.Length.ToString());
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.End();
代码背后
HTTP / 1.1 200 OK服务器:ASP.NET开发服务器/ 10。0。0日期:星期四,星期四, 06 Oct 2011 02:52:26 GMT X-AspNet-Version:4.0.30319 内容 - 处理:附件; filename = my junk.txt Cache-Control: private Content-Type:text / plain Content-Length:29 Connection:Close
仅用于样本测试
HttpHandler的
HTTP / 1.1 200 OK服务器:ASP.NET开发服务器/ 10。0。0日期:星期四,星期四, 06 Oct 2011 02:54:04 GMT X-AspNet-Version:4.0.30319 内容 - 处理:附件; filename = my junk.txt Cache-Control: private Content-Type:text / plain Content-Length:146 Connection:Close
I�%&/m�{J�J��t��
$ @ IG#)的前夕F的@흼{{ ; N' ?\fdl J ɞ! ?〜|?“ yѤ N l ͛6 我
答案 0 :(得分:0)
尝试使用AddHeader()
代替AppendHeader()
,并在Flush()
声明之前调用context.Response.End()
。
答案 1 :(得分:0)