ASP.NET处理程序无法正常工作

时间:2014-08-29 16:56:01

标签: c# jquery asp.net ashx

我在C#中创建了一个Ashx处理程序,它根据传递给我的fileid参数为我提供图像。我也有一个简单的工具提示预览脚本,我写的,这是无效的。您可以看到图像加载,但在加载后,图像就会消失。

我怀疑问题出在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来演示此问题。

2 个答案:

答案 0 :(得分:0)

您在回复结束时丢弃垃圾,特别是因为除了Response.Write之外您还在调用BinaryWrite。如果你看一下你的处理程序的响应,这就结束了(字面意思):

  

System.Byte []

enter image description here

显然,这不是图像的一部分。该行应删除:

context.Response.Write(buffer);

我还会avoidResponse.EndResponse.Close之类的事情。让ASP.NET运行时处理它。

更好的是,如果您使用的是.NET Framework 4或更早版本,您可以简化整个过程:

s.CopyTo(context.Response.OutputStream);

答案 1 :(得分:0)

在您的代码中,行

context.Response.Close();

是个问题。 close方法突然结束响应流,详见here并查看相关问题IIS & Chrome: failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING

将行替换为context.Response.End();以正常结束响应。