测试C#中是否存在图像



.net iis (5)

只需使用HEAD。 如果你不需要,不需要下载整个图像。 这里有一些样板代码。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("url");
request.Method = "HEAD";

bool exists;
try
{
    request.GetResponse();
    exists = true;
}
catch
{
   exists = false;
}

https://code.i-harness.com

我正在为SiteScope编写一个诊断页面,我们需要测试的一个区域是如果从Web服务器访问文件/媒体资源的连接。 我想我可以做到这一点的方式是通过后面的代码加载图像,并测试以查看IIS状态消息是否是200。

所以基本上我应该能够导航到该网站内的文件夹,如:/media/1/image.jpg,看看它是否返回200 ...如果不抛出异常。

我正在努力弄清楚如何编写这个代码。

任何帮助是极大的赞赏。

谢谢


我以前用过这样的东西,但可能有更好的方法:

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somewhere/picture.jpg");
    request.Credentials = System.Net.CredentialCache.DefaultCredentials;
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    myImg.ImageUrl = "http://somewhere/picture.jpg";
}
catch (Exception ex)
{
    // image doesn't exist, set to default picture
    myImg.ImageUrl = "http://somewhere/default.jpg";
}

你必须处理HTTPWebResponse对象,否则你将有问题,因为我有...

    public bool DoesImageExistRemotely(string uriToImage)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage);

            request.Method = "HEAD";

            try
            {
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {

                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            catch (WebException) { return false; }
            catch
            {
                return false;
            }
    }

您可能还需要检查是否有OK状态代码(即HTTP 200),并且响应对象中的MIME类型与您所期望的相符。 你可以沿着这条线延伸,

public bool doesImageExistRemotely(string uriToImage, string mimeType)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriToImage);
    request.Method = "HEAD";

    try
    {
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        if (response.StatusCode == HttpStatusCode.OK && response.ContentType == mimeType)
        {
            return true;
        }
        else
        {
            return false;
        }   
    }
    catch
    {
        return false;
    }
}

如果在“远程服务器返回错误:(401)未授权”请求期间收到异常,

这可以通过添加以下行来解决

request.Credentials = new NetworkCredential(username, password);

问题和答案添加到这个问题, 检查是否存在内部网上的图像





iis