Как прочитать описание ошибки внутреннего сервера ASP.NET с .NET? - PullRequest
5 голосов
/ 19 июня 2009

Вот код:

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" во время отладки. Как мне переписать этот код, чтобы я мог прочитать описание ошибки?

Ответы [ 5 ]

7 голосов
/ 19 июня 2009

Веб-серверы часто возвращают страницу ошибки с более подробной информацией (либо HTML, либо обычный текст, в зависимости от сервера). Вы можете получить это, перехватив WebException и прочитав поток ответов из его свойства Response.

1 голос
/ 01 августа 2009

Я нашел полезную информацию для отладки следующим образом:

        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 голосов
/ 19 июня 2009

Вы должны использовать HttpWebRequest и HttpWebResponse. WebClient - это самая простая вещь для базовых веб-коммуникаций, но она не обеспечивает необходимую вам функциональность. Я думаю, что лучше сделать это, потому что это не вызовет исключения.

0 голосов
/ 19 июня 2009

Мне всегда нравилось

Debug.WriteLine( ex.ToString() );
0 голосов
/ 19 июня 2009

Попробуйте перехватить HttpException и вызвать GetHtmlErrorMessage () для него

...