如何在asp.net中处理自定义HttpHandler的null返回?

时间:2010-06-08 17:54:59

标签: c# asp.net image-manipulation httphandler ashx

我正在使用自定义ashx HttpHandler从数据库中检索gif图像并在网站上显示 - 当图像存在时,它运行良好。

然而,有些情况下图像不存在,我希望让html表保持图像不可见,这样就不会显示“未找到图像”图标。

但由于HttpHandler不同步,我在Page_Load检查图像大小的所有尝试都受挫。关于如何实现这一点的任何想法?

EDIT ::

到目前为止,这是如何发生的:

这是我的经纪人:

 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;

4 个答案:

答案 0 :(得分:1)

  

然而,有的情况下   图像不存在,我想   让html表保存图像   变得看不见所以“图像不是   发现“图标未显示。

解决此问题的最简单方法是在返回之前检查Http-handler(在image.ashx文件中)中是否存在图像。

  if(image == null) {image = new blankImage();}

如果不存在,请将其替换为空白图像。这样就没有找不到图像的图标了。如果你真的希望它消失而不是保持图像大小,只需将空白图像设为1x1平方。

答案 1 :(得分:0)

你能不能只使用NullReferenceException,还是我误解了这个问题?

try
{ 
    //try to get the photo
}
catch (NullReferenceException)
{
    //handle the error
}

您还可以检查我认为image == null是否符合您的情况更有意义。

答案 2 :(得分:0)

因为ashx在page_load之后执行,你可以让它返回1x1平方,但是如果你想完全隐藏列,你会因为生命周期而遇到一些问题。

您可以在页面上创建占位符,并动态构建表格。如果您可以避免使用ashx,而是在代码隐藏中进行图像检索和渲染,那么您将能够知道何时隐藏该列

答案 3 :(得分:0)

即使这会使页面获取图像两次,我也会在很少的页面上使用小图像,所以我认为这是值得的。

这是我添加到页面的代码:

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;
            }

它按预期工作。感谢您的所有投入。