2013-02-01 32 views
22

Tôi đang cố gắng xác định response được trả về theo phương pháp HttpClientGetAsync trong trường hợp lỗi 404 sử dụng C# và .NET 4.5.Cách xác định trạng thái phản hồi 404 khi sử dụng HttpClient.GetAsync()

Hiện tại tôi chỉ có thể biết rằng đã xảy ra lỗi thay vì trạng thái của lỗi như 404 hoặc hết thời gian chờ.

Hiện nay mã của tôi mã của tôi trông như thế này:

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() );     
     } 
    } 

Vấn đề của tôi là tôi không thể xử lý các ngoại lệ và xác định tình trạng của nó và các chi tiết khác về những gì đã xảy ra.

Tôi xử lý đúng cách ngoại lệ và giải thích những lỗi nào đã xảy ra?

+0

http://msdn.microsoft.com/en-us/library/system.exception.aspx hãy nhìn vào tài sản. Nếu bạn cần in tin nhắn, bạn có thể sử dụng 'e.Message'. Không chắc chắn, những gì bạn đang cố gắng làm. – Leri

Trả lời

32

Bạn chỉ có thể kiểm tra StatusCode tài sản của phản ứng:

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

Điều này mang lại cho tôi "Ngoại lệ cơ hội đầu tiên của loại 'System.Net.Http.HttpRequestException' xảy ra trong mscorlib.dll Ngoại trừ loại 'System.Net.Http.HttpRequestException' xảy ra trong mscorlib.dll nhưng không được xử lý trong người dùng mã ". Bạn có biết những gì tôi có thể bị mất? Tôi đã nạp tài nguyên HttpClient qua nuget nếu điều đó thay đổi bất cứ điều gì vì nó không xuất hiện theo mặc định trong .Net 4.5 của tôi. –

+2

Ngoại lệ là gì? Nó là một thời gian chờ? Nếu vậy bạn sẽ phải xử lý trường hợp này với một khối try/catch. Theo như mã trạng thái máy chủ có liên quan, bạn có thể xử lý chúng như được hiển thị trong câu trả lời của tôi. –

+0

"Thông tin bổ sung: Đã xảy ra lỗi khi gửi yêu cầu". là phần thông tin duy nhất khác từ cửa sổ đầu ra. Đó là những gì bạn đề cập đến? –