22

私は本質的にここで尋ねられたのと同じことを探しています: サーバーがエラーを返したときに WebClient を使用して応答本文にアクセスする方法はありますか?

しかし、これまでのところ答えは提供されていません。

サーバーは「400 bad request」ステータスを返しますが、詳細なエラーの説明がレスポンス本文として返されます。

.NET WebClient を使用してそのデータにアクセスするアイデアはありますか? サーバーがエラーステータスコードを返すと、例外がスローされます。

4

2 に答える 2

24

Web クライアントから取得することはできませんが、WebException では、HttpWebResponse オブジェクトにキャストされた応答オブジェクトにアクセスでき、応答オブジェクト全体にアクセスできます。

詳細については、 WebExceptionクラスの定義を参照してください。

以下は MSDN からの例です (明確にするために、Web 応答の内容を読むことを追加しました)。

using System;
using System.IO;
using System.Net;

public class Program
{
    public static void Main()
    {
        try {
            // Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name.
            HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid URL");

            // Get the associated response for the above request.
            HttpWebResponse myHttpWebResponse = (HttpWebResponse) myHttpWebRequest.GetResponse();
            myHttpWebResponse.Close();
        }
        catch(WebException e) {
            Console.WriteLine("This program is expected to throw WebException on successful run."+
                              "\n\nException Message :" + e.Message);
            if(e.Status == WebExceptionStatus.ProtocolError) {
                Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                using (StreamReader r = new StreamReader(((HttpWebResponse)e.Response).GetResponseStream()))
                {
                    Console.WriteLine("Content: {0}", r.ReadToEnd());
                }
            }
        }
        catch(Exception e) {
            Console.WriteLine(e.Message);
        }
    }
}
于 2013-03-11T19:53:41.970 に答える