2009-06-18 10 views
5

Ecco il codice:Come leggere una descrizione dell'errore del server interno ASP.NET con .NET?

using (var client = new WebClient()) 
{ 
    try 
    { 
     var bytesReceived = client.UploadData("http://localhost", bytesToPost); 
     var response = client.Encoding.GetString(bytesReceived); 
    } 
    catch (Exception ex) 
    { 
    } 
} 

sto ottenendo questo HTTP 500 errore interno del server quando il metodo UploadData viene chiamato. Ma non riesco a vedere la descrizione dell'errore ovunque nell'oggetto "ex" durante il debug. Come posso riscrivere questo codice in modo da poter leggere la descrizione dell'errore?

+0

Si vede nulla quando si utilizza Firebug? – azamsharp

+0

@azamsharp Non sono in grado di riprodurre l'errore nel mio browser poiché richiederebbe di pubblicare alcuni dati –

risposta

7

server Web restituiscono spesso una pagina di errore con maggiori dettagli (HTML o testo normale a seconda del server). È possibile prendere questo catturando WebException e leggere il flusso di risposta dalla sua proprietà Response.

0

Prova la cattura di un HttpException e chiamare GetHtmlErrorMessage() su di esso

+0

È un'eccezione Web, non trasmetterà a HttpException. Credimi, ci ho provato. –

0

mi è sempre piaciuto

Debug.WriteLine(ex.ToString()); 
+0

Non è così semplice. Voglio leggere l'errore del server remoto. Che in questo caso è "localhost" per coincidenza. –

+0

Ahh .. incolpato il concetto lì. Se si chiama ancora ToString, in genere si scaricano informazioni diagnostiche per la maggior parte delle eccezioni. Anche eccezioni Web/Http. –

0

È necessario utilizzare HttpWebRequest e HttpWebResponse. WebClient è la cosa più semplice da usare per fare comunicazioni web di base, ma non fornisce le funzionalità di cui hai bisogno. Penso che sia meglio farlo perché non farà un'eccezione.

1

ho trovato informazioni utili per il debug in questo modo:

 catch (WebException ex) 
     { 
      HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response; 
      String details = "NONE"; 
      String statusCode = "NONE"; 
      if (httpWebResponse != null) 
      { 
       details = httpWebResponse.StatusDescription; 
       statusCode = httpWebResponse.StatusCode.ToString(); 
      } 

      Response.Clear(); 
      Response.Write(ex.Message); 
      Response.Write("<BR />"); 
      Response.Write(ex.Status); 
      Response.Write("<BR />"); 
      Response.Write(statusCode); 
      Response.Write("<BR />"); 
      Response.Write(details); 
      Response.Write("<BR />"); 
      Response.Write(ex); 
      Response.Write("<BR />"); 
     } 
+0

HttpWebResponse httpWebResponse = (HttpWebResponse) ex.Response; // Boom! Questo è il brivido che ti farà venire il capriccio del codice di stato. –