Comment lire une description d'erreur de serveur interne ASP.NET avec .NET?
Question
Voici le code:
using (var client = new WebClient())
{
try
{
var bytesReceived = client.UploadData("http://localhost", bytesToPost);
var response = client.Encoding.GetString(bytesReceived);
}
catch (Exception ex)
{
}
}
Je reçois cette erreur de serveur interne HTTP 500 lorsque la méthode UploadData est appelée. Mais je ne vois la description de l'erreur nulle part dans le message "ex". objet pendant le débogage. Comment réécrire ce code pour pouvoir lire la description de l'erreur?
La solution
Les serveurs Web renvoient souvent une page d'erreur avec plus de détails (HTML ou texte brut, selon le serveur). Vous pouvez saisir cela en interceptant WebException
et en lisant le flux de réponses à partir de sa propriété Response
.
Autres conseils
J'ai trouvé des informations utiles pour le débogage de cette façon:
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 />");
}
Essayez d'attraper une exception HttpException et appelez-y GetHtmlErrorMessage ()
J'ai toujours aimé
Debug.WriteLine( ex.ToString() );
Vous devez utiliser HttpWebRequest et HttpWebResponse. WebClient est la méthode la plus simple à utiliser pour la communication Web de base, mais elle ne fournit pas les fonctionnalités dont vous avez besoin. Je pense qu'il vaut mieux le faire car cela ne jettera pas une exception.