クライアントが接続しているサービスを不正なURLにポイントすると、HttpStatusCodeが0になるのはなぜですか。
私のstatusCodeAsIntが0として表示されています。なぜ404として表示されず、処理されないのですか?
IRestResponse response = client.Execute(restReq);
HttpStatusCode statusCode = response.StatusCode;
var statusCodeAsInt = (int) statusCode;
if (statusCodeAsInt >= 500)
{
throw new InvalidOperationException("A server error occurred: " + response.ErrorMessage, response.ErrorException);
}
if (statusCodeAsInt >= 400)
{
throw new InvalidOperationException("Request could not be understood by the server: " + response.ErrorMessage,
response.ErrorException);
}
このRestResponseを処理する適切な方法は何ですか?
応答コード0は、通常、応答が空であることを意味します。つまり、ヘッダーも返されませんでした。
これは通常、接続が受け入れられ、正常に閉じられたときに発生します。FIN接続とも呼ばれます。これは、サーバーへのブロードキャストが終了したことをサーバーが示している場所ですが、引き続き新しいメッセージをリッスンします。 ファイアウォールの問題である可能性があります。
もう1つのことは、IRestResponse
をRestResponse
に変更することです。 IRestResponseを使用しても、このシナリオでは利点はありません。
私の場合は、StatusCodeが0になるファイアウォールの問題ではありませんでした。TLS1.0接続をブロックしたサーバーで、TLS 1.0をまだ使用しているレガシーアプリを使用していました。 TLS 1.2を有効にすると、期待していたステータスコードを取得しました。
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ステータスコード0は、ステータスコードがないことを意味すると思います。エラーが応答ではなくRestSharpにあったことも意味します。ステータスコードが0の場合、リクエストが送信されていない可能性もあります。
.ErrorException/.ErrorMessageをチェックします。
私の場合、無効なホスト名を指定しただけです。