Como ler uma descrição de erro interno do servidor ASP.NET com .NET?
Pergunta
Eis o código:
using (var client = new WebClient())
{
try
{
var bytesReceived = client.UploadData("http://localhost", bytesToPost);
var response = client.Encoding.GetString(bytesReceived);
}
catch (Exception ex)
{
}
}
Estou recebendo este HTTP 500 erro interno do servidor quando o método UploadData é chamado. Mas eu não posso ver a descrição do erro em qualquer lugar do objeto "ex" durante a depuração. Como posso reescrever este código para que eu possa ler a descrição do erro?
Solução
Servidores da Web muitas vezes voltar uma página de erro com mais detalhes (HTML ou texto simples dependendo do servidor). Você pode agarrar esta travando WebException
e ler o fluxo de resposta de sua propriedade Response
.
Outras dicas
Eu encontrei informações úteis para a depuração desta maneira:
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 />");
}
Tente pegar um HttpException e chamar GetHtmlErrorMessage () sobre ele
Eu sempre gostei
Debug.WriteLine( ex.ToString() );
Você deve usar HttpWebRequest e HttpWebResponse. WebClient é a coisa mais simples de usar para fazer uma comunicação básica web, mas não fornece a funcionalidade que você precisa. Eu acho que é melhor de fazer isso, porque não vai lançar uma exceção.