2013-02-01 25 views
22

Próbuję określić metodę response zwróconą przez HttpClient za pomocą C# i .NET 4.5.Jak określić status odpowiedzi 404 podczas korzystania z HttpClient.GetAsync()

Obecnie mogę tylko stwierdzić, że wystąpił błąd, a nie status błędu, taki jak 404 lub limit czasu.

Obecnie mój kod mój kod wygląda następująco:

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

Moim problemem jest to, że nie jestem w stanie obsłużyć wyjątek i określić jego status i innych szczegółów, co poszło źle.

Jak poprawnie obsłużyć wyjątek i zinterpretować, jakie błędy wystąpiły?

+0

http://msdn.microsoft.com/en-us/library/system.exception.aspx przyjrzeć właściwości. Jeśli chcesz wydrukować wiadomość, możesz użyć 'e.Message'. Nie jestem pewien, co próbujesz zrobić. – Leri

Odpowiedz

32

Można łatwo sprawdzić właściwość StatusCode odpowiedzi:

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

To daje mi "wyjątek pierwszej szansy typu" System.Net.Http.HttpRequestException "wystąpił w mscorlib.dll Wyjątek typu" System.Net.Http.HttpRequestException "wystąpił w mscorlib.dll, ale nie był obsługiwany przez użytkownika kod". Czy wiesz, czego może mi brakować? Załadowałem zasób HttpClient przez nuget, jeśli to zmieni cokolwiek, ponieważ nie było domyślnie wyświetlane w moim .Net 4.5. –

+2

Jaki jest wyjątek? Czy to jest limit czasu? Jeśli tak, będziesz musiał obsłużyć tę sprawę blokiem try/catch. Jeśli chodzi o kody statusu serwera, możesz sobie z nimi poradzić, jak pokazano w mojej odpowiedzi. –

+0

"Dodatkowe informacje: Wystąpił błąd podczas wysyłania żądania." to jedyna inna informacja z okna wyjściowego. Czy to właśnie powołujesz się na? –

Powiązane problemy