2016-04-08 20 views
0

以下は、インターネットURIソースからHttp Web応答を取得するためのC#コードスニペットです。 クライアントが応答を取得できない場合、例外がスローされます。
例外 がスローされますが、HttpStatusCodeがOKでない条件が存在するかどうか不思議です(つまり、範囲200-299ではない)。HttpRequest.GetResponseで例外がスローされない

基本的に、例外がスローされない不良ステータスコードは何かを知る必要があります。

try{ 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
catch{} 
+0

正確にわからない何がで定義されたものあなたがそれをキャッチしている間に何もしないで(実際には例外をすべて無視して)例外を投げることは決してありません。あなたはGetReponse行の後ろにも閉じ括弧がありません。ステータスコードのリストは[https://en.wikipedia.org/wiki/List_of_HTTP_status_codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) – Tone

答えて

2

4xx範囲内の任意のステータスコードは、クライアント・エラーとして定義され、ProtocolExceptionをもたらすであろう。 (400-Bad Request、401-Unauthorizedなど)
5xxの範囲内の結果はサーバーエラーとして定義され、CommunicationExceptionになります。 (500内部サーバーエラー、502 Bad Gatewayなど)

これは、たとえば再試行メカニズムを実装する場合に便利です。この例外がCommunicationExceptionの場合は一時的なエラー(接続失敗、DNS解決失敗)である可能性がありますが、例外がProtocolExceptionの場合は再試行が失敗するため、再試行するのは冗長です。他のステータスコードはエラーケースと見なされているかどうか

は、クライアントとサーバが、上記の間の契約に依存している標準のHTTP

List of HTTP status codes

+0

で確認できます。3xxの範囲内のステータスコードはどうですか? – user334223

+0

3xxはリダイレクトであり、有効な非エラー応答です(例外はスローされません)。 'AllowAutoRedirect'がtrueに設定されている場合、これはトランスペアレントになり、リクエストはリダイレクト先に転送されます。 falseに設定されている場合は、サーバーからのリダイレクト応答の処理方法を決定できます。あなたのシナリオでは、リダイレクトが期待された結果ではなく、エラーとみなされた場合、それは通常そうではありませんが、そうした方法で処理できます – Itsik

関連する問題