2014-12-11 28 views
0

此代碼必須根據頁碼找到有效的頁面。這應該實現邏輯 - 如果帶有地址http://hostname/page/x的頁面返回OK狀態,則url有效,如果響應狀態NotFound,url無效。我想在內部處理HttpStatusCode,但它總是被try/catch塊捕獲。在if語句中處理HttpStatusCode,而不是try/catch

public void GetAllLinks() 
      { 
       const string baselink = "http://buzzon.khaleejtimes.com/ad-category/real-estate/page/"; 
       //Check if OK status answer from server, page link is valid 
       for (int i = 1; i < 10000; i++) 
       { 
        var url = baselink + i; 
        if (LinkExist(url) != true) 
        { 
         try { 
         HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
         // Sends the HttpWebRequest and waits for a response. 
         HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
         if (myHttpWebResponse.StatusCode == HttpStatusCode.NotFound) 
         { 
          //Exit loop if status 404. 
          break; 
         } 
         WriteUrl(url); 
         myHttpWebResponse.Close(); 
        } 
        catch (Exception ex) { 
        throw new Exception(ex.Message); 
        } 
       } 
       ParsePages(); 
     } 

回答

0

好吧,我會很高興,如果有人提供更好的解決方案,但現在這一塊的工作:

    catch (WebException ex) 
        { 
         var resp = (HttpWebResponse) ex.Response; 
         if (resp.StatusCode == HttpStatusCode.NotFound) 
         break; 
        } 

我不不喜歡這個解決方案,因爲它不美觀。所以如果有人有更好的主意 - 不客氣。

1

試試這個

public string GetAllLinks() 
      { 
       const string baselink = "http://buzzon.khaleejtimes.com/ad-category/real-estate/page/"; 
       //Check if OK status answer from server, page link is valid 
       for (int i = 1; i < 10000; i++) 
       { 
        var url = baselink + i; 
        if (LinkExist(url) != true) 
        { 
         try 
         { 
         HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
         // Sends the HttpWebRequest and waits for a response. 
         HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
         using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
         { 
         if (HttpStatusCode.OK == response.StatusCode) 
         {       
          WriteUrl(url); 
          myHttpWebResponse.Close(); 
         } 
         else 
          break; 
        } 
        } 
        catch (Exception wex) 
        { 
        string pageContent = new StreamReader(wex.Response.GetResponseStream()).ReadToEnd().ToString(); 
        return pageContent; 
        } 
       } 
       ParsePages(); 
       return "Response Established"; 
     } 
+0

謝謝。讓我嘗試。 – 2014-12-11 04:50:33

+0

不幸的是,同樣的問題再次 - 404代碼抓住try/catch而不是如果循環。 – 2014-12-11 05:12:46

+0

異常中沒有響應方法。你能再次檢查你的代碼嗎? – 2014-12-11 05:26:59

0
try adding a null check .. 

HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create(url); 
// Sends the HttpWebRequest and waits for a response. 
var temp = myHttpWebRequest.GetResponse(); 

if (temp == null) 
{ 
     //break code 
} 
HttpWebResponse myHttpWebResponse = (HttpWebResponse) temp; 
+0

不會出現空答案。總會有一些StatusCode我想。 – 2014-12-11 05:14:33