2013-02-01 12 views
22

Sto cercando di determinare il response restituito dal metodo HttpClientGetAsync nel caso di errori 404 utilizzando C# e .NET 4.5.Come determinare uno stato di risposta 404 quando si utilizza HttpClient.GetAsync()

Al momento posso solo dire che si è verificato un errore piuttosto che lo stato dell'errore come 404 o timeout.

Attualmente il mio codice il mio codice è simile al seguente:

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

Il mio problema è che io sono in grado di gestire l'eccezione e determinarne lo stato e altri dettagli di cosa è andato storto.

Come faccio a gestire correttamente l'eccezione e interpretare ciò che gli errori si è verificato?

+0

http://msdn.microsoft.com/en-us/library/system.exception.aspx dare un'occhiata a proprietà. Se è necessario stampare un messaggio, è possibile utilizzare 'e.Message'. Non sono sicuro, cosa stai cercando di fare. – Leri

risposta

32

Si potrebbe semplicemente controllare la proprietà StatusCode della risposta:

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

Questo mi dà "Un'eccezione di prima scelta di tipo 'System.Net.Http.HttpRequestException' si è verificata in mscorlib.dll Un'eccezione di tipo 'System.Net.Http.HttpRequestException' si è verificata in mscorlib.dll ma non è stata gestita dall'utente codice". Sapresti cosa potrei perdere? Ho caricato la risorsa HttpClient via nuget se questo cambia qualcosa in quanto non appariva per impostazione predefinita nel mio .Net 4.5. –

+2

Qual è l'eccezione? È un timeout? Se è così, dovrai gestire questo caso con un blocco try/catch. Per quanto riguarda i codici di stato del server, è possibile gestirli come mostrato nella mia risposta. –

+0

"Ulteriori informazioni: si è verificato un errore durante l'invio della richiesta." è l'unica altra informazione dalla finestra di output. È quello a cui ti riferisci? –