asp:图像显示图像与否

时间:2012-01-26 07:59:44

标签: c# asp.net image

我使用asp:image字段从不同的网址获取图片。我使用imageurl从远程网站设置图像字符串(例如:http://www.google.com/favicon.ico),问题是如何判断图像是否存在?这意味着图像的Url有效。

3 个答案:

答案 0 :(得分:0)

您可以使用Uri.TryCreate method验证URI是否有效。

您不应该检查ASP.Net应用程序中是否存在该图像。下载图像是浏览器的工作。您可以添加javascript以允许浏览器使用默认图像替换丢失的图像,如this question中所述。

答案 1 :(得分:0)

单独使用asp:Image控件无法做到这一点。但是,通过一些额外的工作,可以使用ASHX处理程序为图像制作程序化的HttpRequest(例如,使用查询字符串上的图像)。如果HttpRequest成功,则可以将图像流式传输到响应。

如果HttpRequest返回404状态,则可以改为提供另一个预定义图像。

然而,这就像使用大锤破解螺母一样,不应该在整个站点中广泛使用,因为它可能会产生很大的负担 - 实际上,你要求服务器(而不是用户的浏览器)下载图像。如果不仔细实施,它也可能是潜在的XSS安全风险。

对于个别情况会很好,特别是当您确实需要在本地保留所请求的图像时。请求的任何图像都应写入磁盘,以便将来的请求可以提供以前保留的图像。

显然,Javascript也是一个解决方案,但我提到了上述可能性,具体取决于要求。

答案 2 :(得分:0)

class MyClient : WebClient
{
    public bool HeadOnly { get; set; }
    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest req = base.GetWebRequest(address);
        if (HeadOnly && req.Method == "GET")
        {
            req.Method = "HEAD";
        }
        return req;
    }
}


private bool headOnly;
public bool HeadOnly {
    get {return headOnly;}
    set {headOnly = value;}
}


using(var client = new MyClient()) {
    client.HeadOnly = true;
    // fine, no content downloaded
    string s1 = client.DownloadString("http://google.com");
    // throws 404
    string s2 = client.DownloadString("http://google.com/silly");
}

试试这个!!!