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

HttpWebRequest と HttpWebResponse を使用する必要があります。WebClient は、基本的な Web 通信を行うために使用する最も簡単なものですが、必要な機能を提供しません。例外がスローされないので、これを行う方が良いと思います。

于 2009-06-18T20:58:47.253 に答える
0

HttpException をキャッチして GetHtmlErrorMessage() を呼び出してみてください

于 2009-06-18T20:30:49.837 に答える
0

ずっと好きだった

Debug.WriteLine( ex.ToString() );
于 2009-06-18T20:33:52.513 に答える