我正在尝试创建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" />
答案 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'>");
}
你在try
和catch
做了很多不同的事情 - 而不是在你的捕获中写一个string
,你应该返回文件:
catch
{
ctx.Response.WriteFile("path to defaultevent.jpg");
}