ASP.NET处理程序无法正常工作
问题描述:
我在C#中创建了一个Ashx处理程序,它根据传递给我的fileid
参数为我提供图像。我也有一个我写的简单的工具提示预览脚本,它不起作用。您可以看到图像加载,但加载后,图像就消失了。ASP.NET处理程序无法正常工作
我怀疑问题是在ASHX处理程序,因为如果我使用静态图像,它工作得很好。这里是我的ASHX处理程序代码:
public void ProcessRequest(HttpContext context)
{
string fileId = HttpUtility.UrlDecode(context.Request.QueryString["fileId"] ?? "") ?? "";
string fullFileName = context.Server.MapPath("~/Uploads") + "\\" + fileId;
using (FileStream s = File.Open(fullFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
context.Response.ContentType = HelperClasses.Utility.GetMimeTypeFromMagic(fullFileName);
var buffer = new byte[s.Length];
s.Read(buffer, 0, (int) s.Length);
context.Response.BinaryWrite(buffer);
context.Response.Write(buffer);
s.Close();
}
context.Response.Flush();
context.Response.Close();
}
另外,我创建a fiddle来证明这个问题。
答
在你的代码中,行
context.Response.Close();
是问题。 close方法突然结束响应流,请参阅详细信息here并检查相关问题IIS & Chrome: failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
用context.Response.End();
替换行以正常结束响应。
答
您在响应结束时抛出垃圾,具体是因为除BinaryWrite
之外您还打电话Response.Write
。如果你看一下你的处理程序的响应,这是在年底(直译):
System.Byte []
显然不是图像的一部分。此行应被删除:
context.Response.Write(buffer);
我也avoid会做这样Response.End
和Response.Close
什么。让ASP.NET运行时处理这一点。
的是,如果您使用的是.NET框架4或以上,可以简化整个事情到这一点:
s.CopyTo(context.Response.OutputStream);
嘿我认为它的这个问题与铬,http://stackoverflow.com/questions/22219565/iis-chrome-failed-to-load-resource-neterr-incomplete-chunked-encoding – 2014-08-29 17:01:13
你的处理程序是好的;如果我将URL插入浏览器,我会看到图像。 – 2014-08-29 17:07:02
'GetMimeTypeFromMagic'(真棒方法名称btw)是否返回正确的内容类型? – PoweredByOrange 2014-08-29 17:08:27