2013-03-11 12 views
7

sto cercando essenzialmente la stessa cosa ha chiesto qui: Any way to access response body using WebClient when the server returns an error?WebClient - ottenere corpo di risposta in caso di errore codice di stato

Ma nessuna risposta sono stati forniti finora.

Il server restituisce uno stato di "400 richiesta errata", ma con una spiegazione dettagliata dell'errore come corpo della risposta.

Qualche idea sull'accesso a tali dati con .NET WebClient? Genera solo un'eccezione quando il server restituisce un codice di stato di errore.

+4

Questa altra domanda può aiutare: http://stackoverflow.com/questions/7036491/get-webclient-errors-as-string –

+0

E questo http://stackoverflow.com/ domande/11828843/c-sharp-webexception-how-to-get-whole-response-with-a-body – I4V

risposta

8

Non è possibile ottenerlo dal webclient tuttavia su WebException è possibile accedere al cast di oggetti risposta in un oggetto HttpWebResponse e sarà possibile accedere all'intero oggetto di risposta.

Vedere la definizione della classe WebException per ulteriori informazioni.

Di seguito è riportato un esempio da MSDN (non è il modo migliore per gestire l'eccezione ma dovrebbe darvi un'idea)

try { 
    // Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name. 
    HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid site"); 

    // Get the associated response for the above request. 
    HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse(); 
    myHttpWebResponse.Close(); 
} 
catch(WebException e) { 
    Console.WriteLine("This program is expected to throw WebException on successful run."+ 
         "\n\nException Message :" + e.Message); 
    if(e.Status == WebExceptionStatus.ProtocolError) { 
     Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode); 
     Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription); 
    } 
} 
catch(Exception e) { 
    Console.WriteLine(e.Message); 
} 
+0

So che sta usando HttpWebRequest ma è lo stesso per WebClient poiché TUTTO il metodo può restituire una WebException – dmportella

0

È possibile recuperare il contenuto della risposta come questa:

using (WebClient client = new WebClient()) 
{ 
    try 
    { 
     string data = client.DownloadString(
      "http://your-url.com"); 
     // successful... 
    } 
    catch (WebException ex) 
    { 
     // failed... 
     using (StreamReader r = new StreamReader(
      ex.Response.GetResponseStream())) 
     { 
      string responseContent = r.ReadToEnd(); 
      // ... do whatever ... 
     } 
    } 
} 

Testato: su. Net 4.5.2