Как прочитать описание ошибки внутреннего сервера ASP.NET с .NET?
Вопрос
Вот код:
using (var client = new WebClient())
{
try
{
var bytesReceived = client.UploadData("http://localhost", bytesToPost);
var response = client.Encoding.GetString(bytesReceived);
}
catch (Exception ex)
{
}
}
Я получаю эту внутреннюю ошибку сервера HTTP 500 при вызове метода UploadData. Но я не вижу описания ошибки нигде в " ex " объект во время отладки. Как мне переписать этот код, чтобы я мог прочитать описание ошибки?
Решение
Веб-серверы часто возвращают страницу ошибки с более подробной информацией (либо HTML, либо обычный текст в зависимости от сервера). Вы можете получить это, перехватив WebException
и считав поток ответов из его свойства Response
.
Другие советы
Я нашел полезную информацию для отладки таким образом:
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 />");
}
Попробуйте перехватить HttpException и вызвать для него функцию GetHtmlErrorMessage ()
Мне всегда нравилось
Debug.WriteLine( ex.ToString() );
Вы должны использовать HttpWebRequest и HttpWebResponse. WebClient - это самая простая вещь для базовых веб-коммуникаций, но она не обеспечивает необходимую вам функциональность. Я думаю, что лучше сделать это, потому что это не вызовет исключения.