[英]How to handle null return from custom HttpHandler in asp.net?
我正在使用自定义的ashx HttpHandler从数据库检索gif图像并将其显示在网站上-当图像存在时,它的效果很好。
但是,在某些情况下,该图像将不存在,并且我希望包含该图像的html表变得不可见,因此不会显示“未找到图像”图标。
但是由于HttpHandler不同步,因此我在Page_Load处检查图像大小的所有尝试均受挫。 关于如何实现这一目标的任何想法?
编辑::
到目前为止,这是怎么回事:
这是我的处理程序:
public void ProcessRequest(HttpContext context)
{
using (Image image = GetImage(context.Request.QueryString["id"]))
{
context.Response.ContentType = "image/gif";
image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
}
}
private Image GetImage(string id)
{
try
{
System.IO.MemoryStream ms;
byte[] rawImage;
Image finalImage;
// Database specific code!
rawImage = getImageFromDataBase(id);
ms = new System.IO.MemoryStream(rawImage, 0, rawImage.Length);
ms.Write(rawImage, 0, rawImage.Length);
finalImage = System.Drawing.Image.FromStream(ms, true);
return finalImage;
}
catch (Exception ex)
{
System.Console.WriteLine("ERROR:::: " + ex.Message);
return null;
}
}
我这样使用它:
myImage.ImageUrl = "Image.ashx?id=" + properId;
但是,在某些情况下,该图像将不存在,并且我希望包含该图像的html表变得不可见,因此不会显示“未找到图像”图标。
解决此问题的最简单方法是在返回之前检查图像是否存在于Http处理程序中(在image.ashx文件中)。
if(image == null) {image = new blankImage();}
如果不存在,请用空白图像替换。 这样就没有图像找不到图标。 如果您确实希望它消失并且不保留图像大小,只需将空白图像设置为1x1正方形即可。
您不仅可以使用NullReferenceException,还是我会误解这个问题?
try
{
//try to get the photo
}
catch (NullReferenceException)
{
//handle the error
}
我还可以检查image == null
是否为image == null
,这在您的情况下可能更有意义。
由于ashx在page_load之后执行,您可以使其返回1x1的正方形,但是,如果您想完全隐藏该列,则由于生命周期会出现一些问题。
您可以在页面上创建一个占位符,并动态构建表格。 如果可以避免使用ashx,而在后台代码中进行图像检索和渲染,则可以知道何时隐藏列或不隐藏列
尽管这使页面两次获取图像,但我使用的是小图像,而且页面很少,所以我认为这是值得的。
这是我添加到页面的代码:
public static bool CheckImageExistance(string url)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "HEAD";
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
response.Close();
return (response.StatusCode == HttpStatusCode.OK);
}
catch (Exception ex)
{
return false;
}
它按预期工作。 感谢所有的投入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.