C# asp:是否显示图像

C# asp:是否显示图像,c#,asp.net,image,C#,Asp.net,Image,我使用asp:image字段从不同的URL获取图像。我使用imageurl从远程网站(例如:)设置图像字符串,问题是如何判断图像是否存在?这意味着图像的Url是有效的。您可以使用来验证URI是否有效 您不应该检查ASP.Net应用程序中是否存在该映像。浏览器的工作是下载图像。您可以添加javascript以允许浏览器用默认图像替换缺少的图像,如中所述。您不能单独使用asp:image控件来完成此操作。但是,只需做一点额外的工作,就可以使用ASHX处理程序对图像进行编程HttpRequest(例如

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

您可以使用来验证URI是否有效


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

您不能单独使用asp:image控件来完成此操作。但是,只需做一点额外的工作,就可以使用ASHX处理程序对图像进行编程
HttpRequest
(例如,使用查询字符串上的图像)。如果
HttpRequest
成功,则可以将图像流式传输到响应

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

但是,这就像是用大锤敲开螺母,不应该在整个站点中广泛使用,因为它可能会产生巨大的负载-本质上,您是在要求服务器(而不是用户的浏览器)下载图像。如果不小心实施,它也可能是一个潜在的XSS安全风险

对于个别情况,尤其是当您实际需要在本地保留请求的图像时,这将是很好的。任何请求的映像都应写入磁盘,以便将来的请求可以服务于以前保留的映像

显然,Javascript也是一种解决方案,但我提到了上述可能性,这取决于需求

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");
}
试试这个