6

看代码:

using (var client = new WebClient())
{
    try
    {
        var bytesReceived = client.UploadData("http://localhost", bytesToPost);
        var response = client.Encoding.GetString(bytesReceived);
    }
    catch (Exception ex)
    {
    }
}

调用 UploadData 方法时,我收到此 HTTP 500 内部服务器错误。但是在调试时,我在“ex”对象的任何地方都看不到错误描述。如何重写此代码以便阅读错误描述?

4

5 回答 5

8

Web 服务器通常会返回包含更多详细信息的错误页面(HTML 或纯文本,具体取决于服务器)。WebException您可以通过从其属性中捕获和读取响应流来获取它Response

于 2009-06-18T20:36:23.413 回答
1

我找到了以这种方式进行调试的有用信息:

        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 />");
        }
于 2009-07-31T21:59:51.980 回答
0

尝试捕获 HttpException 并在其上调用 GetHtmlErrorMessage()

于 2009-06-18T20:30:49.837 回答
0

我一直很喜欢

Debug.WriteLine( ex.ToString() );
于 2009-06-18T20:33:52.513 回答
0

您应该使用 HttpWebRequest 和 HttpWebResponse。WebClient 是用于进行基本 Web 通信的最简单的东西,但它不提供您需要的功能。我认为这样做更好,因为它不会抛出异常。

于 2009-06-18T20:58:47.253 回答