Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试以查看C语言中是否存在图像#_C#_.net_Iis - Fatal编程技术网

C# 测试以查看C语言中是否存在图像#

C# 测试以查看C语言中是否存在图像#,c#,.net,iis,C#,.net,Iis,我正在为SiteScope编写一个诊断页面,我们需要测试的一个方面是,是否可以从web服务器访问到文件/媒体资产的连接。我认为可以这样做的一种方法是通过代码隐藏加载映像,并测试IIS状态消息是否为200 所以基本上我应该能够在站点中导航到如下文件夹:/media/1/image.jpg,并查看它是否返回200…如果不抛出异常 我正在努力找出如何编写这段代码 非常感谢您的帮助 谢谢只要用头就行了。如果不需要,无需下载整个图像。这里有一些样板代码 HttpWebRequest request = (

我正在为SiteScope编写一个诊断页面,我们需要测试的一个方面是,是否可以从web服务器访问到文件/媒体资产的连接。我认为可以这样做的一种方法是通过代码隐藏加载映像,并测试IIS状态消息是否为200

所以基本上我应该能够在站点中导航到如下文件夹:/media/1/image.jpg,并查看它是否返回200…如果不抛出异常

我正在努力找出如何编写这段代码

非常感谢您的帮助


谢谢

只要用头就行了。如果不需要,无需下载整个图像。这里有一些样板代码

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

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

我将转而研究HttpWebRequest——我认为前面的答案实际上是下载数据,而您应该能够在没有HttpWebRequest数据的情况下获得响应

在第4步之前,我们应该做到这一点。如果需要,HttpWebResponse上还有其他字段用于获取数字代码


杰克

我以前用过类似的方法,但可能有更好的方法:

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

您可能还需要检查您是否获得了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;
    }
}

您必须处理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;
            }
    }

如果您在请求过程中遇到异常,如“远程服务器返回错误:(401)未经授权”

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

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

问题和答案添加到此问题中。

如果url像http:\server.myImageSite.com一样存在,则答案也为false 仅当imageSize>0为真时

  public static void GetPictureSize(string url, ref float width, ref float height, ref string err)
  {
    System.Net.HttpWebRequest wreq;
    System.Net.HttpWebResponse wresp;
    System.IO.Stream mystream;
    System.Drawing.Bitmap bmp;

    bmp = null;
    mystream = null;
    wresp = null;
    try
    {
        wreq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
        wreq.AllowWriteStreamBuffering = true;

        wresp = (HttpWebResponse)wreq.GetResponse();

        if ((mystream = wresp.GetResponseStream()) != null)
            bmp = new System.Drawing.Bitmap(mystream);
    }
    catch (Exception er)
    {
        err = er.Message;
        return;
    }
    finally
    {
        if (mystream != null)
            mystream.Close();

        if (wresp != null)
            wresp.Close();
    }
    width = bmp.Width;
    height = bmp.Height;
}

public static bool ImageUrlExists(string url)
{

    float width = 0;
    float height = 0;
    string err = null;
    GetPictureSize(url, ref width, ref height, ref err);
    return width > 0;
}

它将下载的唯一内容是响应头,根据定义,“响应”可以应用于文件夹(如果文件夹存在或不存在)?@JL,什么文件夹?文件系统??不是每个文件都会返回true,而不仅仅是图像吗?我想补充一点,如果您在HttpWebResponse请求周围添加一个using语句。。。您将确保您的应用程序在连续三次请求后不会挂起。当使用BackgroundWorker时,可能会出现这种情况。使用(HttpWebResponse=(HttpWebResponse)request.GetResponse()){//逻辑在这里出现}如果您得到任何协议错误(远程服务器返回了一个错误:(500)内部服务器错误)。更改:request.Method=“get”;要为图像指定的mimeType是什么?如果我想测试URL为
http://localhost/homepage
并查看此页面中是否缺少任何图像?我最初的想法是使用
HttpWebRequest
阅读页面,获得响应,然后查看内容,对于每个元素,生成另一个请求。有什么不同的想法吗?可能是