私は本質的にここで尋ねられたのと同じことを探しています: サーバーがエラーを返したときに WebClient を使用して応答本文にアクセスする方法はありますか?
しかし、これまでのところ答えは提供されていません。
サーバーは「400 bad request」ステータスを返しますが、詳細なエラーの説明がレスポンス本文として返されます。
.NET WebClient を使用してそのデータにアクセスするアイデアはありますか? サーバーがエラーステータスコードを返すと、例外がスローされます。
私は本質的にここで尋ねられたのと同じことを探しています: サーバーがエラーを返したときに WebClient を使用して応答本文にアクセスする方法はありますか?
しかし、これまでのところ答えは提供されていません。
サーバーは「400 bad request」ステータスを返しますが、詳細なエラーの説明がレスポンス本文として返されます。
.NET WebClient を使用してそのデータにアクセスするアイデアはありますか? サーバーがエラーステータスコードを返すと、例外がスローされます。
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);
}
}
}