Come leggere una descrizione dell'errore del server interno ASP.NET con .NET?
Domanda
Ecco il codice:
using (var client = new WebClient())
{
try
{
var bytesReceived = client.UploadData("http://localhost", bytesToPost);
var response = client.Encoding.GetString(bytesReceived);
}
catch (Exception ex)
{
}
}
Ricevo questo errore del server interno HTTP 500 quando viene chiamato il metodo UploadData. Ma non riesco a vedere la descrizione dell'errore da nessuna parte in " ex " oggetto durante il debug. Come riscrivo questo codice per poter leggere la descrizione dell'errore?
Soluzione
I server Web spesso restituiscono una pagina di errore con maggiori dettagli (HTML o testo normale a seconda del server). Puoi prenderlo catturando WebException
e leggendo il flusso di risposta dalla sua proprietà Response
.
Altri suggerimenti
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 />");
}
Prova a catturare un HttpException e chiama GetHtmlErrorMessage () su di esso
Mi è sempre piaciuto
Debug.WriteLine( ex.ToString() );
È necessario utilizzare HttpWebRequest e HttpWebResponse. WebClient è la cosa più semplice da utilizzare per effettuare comunicazioni Web di base, ma non fornisce le funzionalità necessarie. Penso che sia meglio farlo perché non genererà un'eccezione.