2017-07-03 90 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