2017-07-03 139 views
0

如果这是一个明显的,愚蠢的或以前回答的问题,我表示歉意......但我一直在四处寻找答案,并且没有找到任何帮助我的答案。在C#中提取HTTP状态代码

我正在写一个简单的应用程序,它会生成一个随机的字符串,然后将该字符串附加到图像托管网站的URL - 这是一种图像轮盘赌的想法。我使用下面的函数来验证图像存在:

private bool ImgVerifier(string url) 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Method = WebRequestMethods.Http.Head; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      int statusCode = (int)response.StatusCode; 

      if (statusCode == 302) 
      { 
       MessageBox.Show("Status: " + response.StatusCode.ToString() + " at URL: " + url); 
       response.Close(); 
       return false; 
      } 
      else 
      { 
       MessageBox.Show("Status: " + response.StatusCode.ToString() + " at URL: " + url); 
       response.Close(); 
       return true; 
      } 
     } 

我的问题是功能似乎从来没有比报告的HTTP“OK”状态的任何其他。在SeoBook Server Header Checker网站上检查图片网址时,它会将网页报告为302错误。

回答

0

302是HTTP重定向(不是错误)。您正在使用的组件会自动遵循重定向。 HttpWebRequest.AllowAutoRedirect默认为true,这就是为什么当它成功地遵循重定向时只能看到OK的最终结果。

0

HttpWebRequest引发了许多HTTP错误的异常。出于这个原因,你的代码永远不会达到int statusCode = (int)response.StatusCode;。要获取这些错误,请将代码包装在try...catch中,并检查WebException.Status属性。

在302的情况下,HttpWebRequest重定向到新页面。如果将AllowAutoRedirect属性设置为false,则HTTP状态码为300到399的所有响应都会返回给应用程序。

+0

啊,我明白了!非常感谢你。 :) – Whiskers