2013-02-01 44 views
22

我試圖確定 的GetAsync方法在使用C#和.NET 4.5的404錯誤的情況下返回的方法。如何確定404響應狀態時使用HttpClient.GetAsync()

目前我只能說出現了錯誤,而不是錯誤的狀態,如404或超時。

目前我的代碼我的代碼看起來是這樣的:

static void Main(string[] args) 
    { 
     dotest("http://error.123"); 
     Console.ReadLine(); 
    } 

    static async void dotest(string url) 
    { 
     HttpClient client = new HttpClient(); 

     HttpResponseMessage response = new HttpResponseMessage(); 

     try 
     { 
      response = await client.GetAsync(url); 

      if (response.IsSuccessStatusCode) 
      { 
       Console.WriteLine(response.StatusCode.ToString()); 
      } 
      else 
      { 
       // problems handling here 
       string msg = response.IsSuccessStatusCode.ToString(); 

       throw new Exception(msg); 
      } 

     } 
     catch (Exception e) 
     { 
      // .. and understanding the error here 
      Console.WriteLine( e.ToString() );     
     } 
    } 

我的問題是,我無法處理異常,並確定其狀態和什麼地方出了錯其他細節。

我該如何正確處理異常並解釋發生了什麼錯誤?

+0

http://msdn.microsoft.com/en-us/library/system.exception.aspx看看屬性。如果你需要打印信息,你可以使用'e.Message'。不知道,你在做什麼。 – Leri

回答

32

你可以簡單地檢查響應的StatusCode屬性:

static async void dotest(string url) 
{ 
    using (HttpClient client = new HttpClient()) 
    { 
     HttpResponseMessage response = await client.GetAsync(url); 

     if (response.IsSuccessStatusCode) 
     { 
      Console.WriteLine(response.StatusCode.ToString()); 
     } 
     else 
     { 
      // problems handling here 
      Console.WriteLine(
       "Error occurred, the status code is: {0}", 
       response.StatusCode 
      ); 
     } 
    } 
} 
+0

這給了我「mscorlib.dll中發生類型'System.Net.Http.HttpRequestException'的第一次機會異常 mscorlib.dll中發生了類型'System.Net.Http.HttpRequestException'的異常,但未在用戶中處理碼」。你知道我可能會錯過什麼嗎?我通過nuget加載了HttpClient資源,如果它改變了任何東西,因爲它在我的.Net 4.5中沒有默認顯示。 –

+2

什麼是例外?它是否超時?如果是這樣,你將不得不通過try/catch塊來處理這種情況。就服務器狀態代碼而言,您可以按照我的答案中所示處理它們。 –

+0

「附加信息:發送請求時發生錯誤。」是輸出窗口中唯一的其他信息。這是你所指的嗎? –

相關問題