HttpHandler不会在运行时发送图像

时间:2011-11-11 22:20:41

标签: c# asp.net visual-studio-2010 webforms

我的图片突然无法在我的应用程序中运行。在设计期间,它们完美呈现。但是在运行时,我的所有图像都不存在。我把它们放在Images文件夹中。我正在使用“〜/”返回根目录。这曾经工作,出于某种原因停止工作。有什么想法吗?

<asp:Image ID="imgFirstElected" runat="server" 
          ImageUrl="~/Images/calendar_icon.gif" style="cursor:pointer;" />

编辑:

好的,我发现这是因为我的ImageHandler。如果我从web.config中删除此代码,我的图像会再次出现。知道如何解决这个问题吗?

<httpHandlers>
  <add verb="*" path="*.bmp" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.jpg" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.gif" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
  <add verb="*" path="*.png" type="CurrentFigures.HttpImageHandler,CurrentFigures"/>
</httpHandlers>

编辑:图像处理程序代码

public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public void ProcessRequest(HttpContext context)
    {
        int imageid = Parser.GetInt(context.Request.QueryString["ImID"]);
        ProfileImage image = new ProfileImage(Parser.GetInt(imageid));

        if (imageid > 0)
        {
            context.Response.ContentType = "image/jpeg";
            Stream strm = ShowImage(imageid);
            byte[] buffer = new byte[4096];
            int byteSeq = strm.Read(buffer, 0, 4096);

            while (byteSeq > 0)
            {
                context.Response.OutputStream.Write(buffer, 0, byteSeq);
                byteSeq = strm.Read(buffer, 0, 4096);
            }
        }

        /*
        string imageid = context.Request.QueryString["ImID"];
        ProfileImage image = new ProfileImage(Parser.GetInt(imageid));

        context.Response.BinaryWrite(image.ImageData);
        context.Response.End(); */
    }

    public Stream ShowImage(int imageID)
    {
        ProfileImage image = new ProfileImage(Parser.GetInt(imageID));

        try
        {
            return new MemoryStream(image.ImageData);
        }
        catch
        {
            return null;
        }
    }

1 个答案:

答案 0 :(得分:1)

您需要在context.Response.Flush();循环结束后调用while