質問

あくに位置するこのレスポンスのHTTPステータスコードから System.Net.WebException?

役に立ちましたか?

解決

たぶん、このような何か...

try
{
    // ...
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        var response = ex.Response as HttpWebResponse;
        if (response != null)
        {
            Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
        }
        else
        {
            // no http status code available
        }
    }
    else
    {
        // no http status code available
    }
}

他のヒント

を利用 null条件オペレーター (?. きのレスポンスのHTTPステータスコードを単一のコード:

 HttpStatusCode? status = (ex.Response as HttpWebResponse)?.StatusCode;

変数 status が含まれますの HttpStatusCode.があり、より一般的な障害のようなネットワークエラーがレスポンスのHTTPステータスコードは常に送信して status はnullになります。その場合は見学もできる ex.Status を取得 WebExceptionStatus.

また記述する文字列をログに異常があった場合は利用できる null律でオペレーター (??)の関連するエラー:

string status = (ex.Response as HttpWebResponse)?.StatusCode.ToString()
    ?? ex.Status.ToString();

の場合は例外がスローされますの結果として404レスポンスのHTTPステータスコードの文字列が含まれます"NotFound".一方の場合、サーバーはオフラインの文字列が含まれます"ConnectFailureによって設定されています。

(誰のための知りたい方は、HTTP substatus コードです。ることはできません。では、Microsoft IISの概念がみ ログインし、サーバとのないクライアントに返送します.)

この作品にWebResponseは、A HttpWebResponseの場合にのみます。

try
{
    ...
}
catch (System.Net.WebException exc)
{
    var webResponse = exc.Response as System.Net.HttpWebResponse;
    if (webResponse != null && 
        webResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
    {
        MessageBox.Show("401");
    }
    else
        throw;
}

(私は質問が古い実現しませんが、それはGoogleでトップヒットの中です。)

あなたが応答コードを知りたい一般的な状況は、例外処理です。例外は、あなたの述語と一致した場合にC#7のとおり、あなたは実際にのみcatch節を入力するためにパターンマッチングを使用することができます:

catch (WebException ex) when (ex.Response is HttpWebResponse response)
{
     doSomething(response.StatusCode)
}

これは容易にそのようなWebExceptionが実際に別の内部例外であった(我々のみ404に興味がある)、この場合のように更なるレベルに拡張することができます。

catch (StorageException ex) when (ex.InnerException is WebException wex && wex.Response is HttpWebResponse r && r.StatusCode == HttpStatusCode.NotFound)

最後に:私たちは、上記の溶液との最初の場所で句を入力しないので、それは、あなたの基準に一致しない場合にcatch句で再スロー例外への必要はありません注意してください。

あなたはWebExceptionからGET HTTPステータスコードにこのコードを試すことができます。 SLはWebExceptionStatus.ProtocolErrorが定義されていないので、それはあまりにもSilverlightで動作します。

HttpStatusCode GetHttpStatusCode(WebException we)
{
    if (we.Response is HttpWebResponse)
    {
        HttpWebResponse response = (HttpWebResponse)we.Response;
        return response.StatusCode;
    }
    return null;
}
ある場合は、私はわからないが、このようなAのプロパティがあった場合には、信頼できるとは考えられないであろう。 WebExceptionは、単純なネットワークエラーを含むHTTPエラーコード以外の理由で焼成することができます。これらには、このようなマッチングHTTPエラーコードを持っていません。

あなたは私たちにあなたがそのコードを達成しようとしているものについて、もう少し情報を与えることができます。あなたが必要な情報を取得するためのより良い方法があるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top