[解決済み】.Net HttpWebRequest.GetResponse() で http ステータスコード 400 (bad request) が返されると例外が発生する。
2022-04-07 23:03:19
質問
サーバーからHTTP 400コードを受け取ったとき、それは私のリクエストに何が問題だったのかを伝えるための完全に合法的な方法です(HTTPレスポンスのコンテンツにメッセージを使用)。
しかし、.NET HttpWebRequestは、ステータスコードが400の場合、例外を発生させます。
これはどのように処理すればよいのでしょうか?私にとっては、400は完全に合法であり、むしろ有用です。HTTPのコンテンツには重要な情報が含まれていますが、例外が発生すると、私は道を踏み外してしまいます。
解決方法は?
throw on non-success code"をオフにする方法があればいいのですが、WebExceptionをキャッチすれば、少なくともレスポンスを使用することは可能です。
using System;
using System.IO;
using System.Web;
using System.Net;
public class Test
{
static void Main()
{
WebRequest request = WebRequest.Create("http://csharpindepth.com/asd");
try
{
using (WebResponse response = request.GetResponse())
{
Console.WriteLine("Won't get here");
}
}
catch (WebException e)
{
using (WebResponse response = e.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse) response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data))
{
string text = reader.ReadToEnd();
Console.WriteLine(text);
}
}
}
}
}
成功コードでなくてもレスポンスを取得する」部分を別のメソッドでカプセル化するとよいでしょう。(接続できなかった場合など、レスポンスがない場合でもthrowすることをお勧めします)。
エラーレスポンスが大きくなる可能性がある場合(これは珍しいことです)には、以下のように調整するとよいでしょう。
HttpWebRequest.DefaultMaximumErrorResponseLength
を使用して、エラー全体を取得するようにします。
関連
-
[解決済み] msiexec を使用せずにコマンドラインから MSI ファイルをアンインストールする
-
[解決済み] WPFで角丸ボタンを作成する/作るには?
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み] HttpWebRequest-リモートサーバーがエラーを返しました。(400) 不正なリクエスト
-
[解決済み] 到達不能なホストに対してソケット操作を行おうとした
-
[解決済み] AssemblyInfo.csは何に使うのですか?
-
[解決済み] AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersionの違いは何ですか?
-
[解決済み] System.Timers.Timer vs System.Threading.Timer
-
[解決済み] HashSetとListの性能比較
-
[解決済み】HttpWebRequestとHttpWebResponseからHttpステータスコード番号(200, 301, 404など)を取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイラーエラーメッセージ。コンパイラはエラーコード -532462766 で失敗しました。
-
[解決済み] ServicePointManagerは、*スキームのプロキシをサポートしていません[closed]。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] フレームワークとアーキテクチャの違いは何ですか?[クローズド]
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
-
[解決済み] MemoryStreamから文字列を取得する方法は?