空问题上的处理器图像显示

时间:2011-03-15 14:39:33

标签: c# asp.net sql httphandler

我正在尝试创建Handler,并且我试图让它在返回空值时返回默认图片。但是当我使用下面的第二个代码位通过页面访问它时,我得到一个错误图像。但是,如果我直接进入页面Image.ashx?id = 28并且没有图像存在我得到我的默认图像,为什么它不显示在我的页面上?如果图像确实存在,则会在页面上显示该图像并直接调用。

由于

我的Image.ashx文件:

    public void ProcessRequest(HttpContext ctx)
    {
        string id = ctx.Request.QueryString["id"];

        SqlConnection con = new SqlConnection(CONN INFO);
        SqlCommand cmd = new SqlCommand("SELECT EventInviteImage FROM Events WHERE EventID = @EventID", con);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@EventID", id);

        byte[] pict = null; 

        try
        {
            con.Open();
            pict = (byte[])cmd.ExecuteScalar();            

            ctx.Response.ContentType = "image/pjpeg";
            ctx.Response.BinaryWrite(pict);
        }
        catch
        {
            ctx.Response.Write("<img src='/images/defaultevent.jpg'>");
        }
        finally
        {
            con.Close();
        }



    }

    public bool IsReusable
    {
        get
        {
            return true;
        }
    }

致电图片:

<img src="Image.ashx?id=28" />

1 个答案:

答案 0 :(得分:2)

try
{
   ...
   ctx.Response.ContentType = "image/pjpeg";
   ctx.Response.BinaryWrite(pict);
}
catch
{
   ctx.Response.ContentType = "image/pjpeg";
   ctx.Response.Write("<img src='/images/defaultevent.jpg'>");
}

你在trycatch做了很多不同的事情 - 而不是在你的捕获中写一个string,你应该返回文件:

catch
{
  ctx.Response.WriteFile("path to defaultevent.jpg");
}