2009-03-23 4 views
7

たとえば、System.Net.FtpWebRequestを作成して実行します。特定のWebExceptionをキャッチする(550)

catch (WebException ex) {}を使用して、このリクエストによってスローされたウェブ関連の例外をキャッチすることができます。しかし、(550) file not foundのために例外がスローされたときに実行したいロジックがあればどうしますか?

これを行うにはどうすればよいですか?

const string fileNotFoundExceptionMessage = 
    "The remote server returned an error: (550) File unavailable (e.g., file not found, no access)."; 
if (ex.Message == fileNotFoundExceptionMessage) { 

をしかし、このメッセージは、道を変えることができるように、理論的に思える:私は平等のための例外メッセージとテストをコピーすることができます。

または、例外メッセージに「550」が含まれているかどうかを確認するだけで済みます。この方法は、メッセージが変更された場合(おそらく、テキストのどこかに「550」が含まれている可能性が高い)、おそらくより効果的です。もちろん、他のWebExceptionのテキストに「550」が含まれていると、このようなテストは真になります。

例外のにアクセスする方法はないようです。これは可能ですか?

答えて

14

WebExceptionは、確認できるプロパティStatusCodeを公開しています。

あなたはこのような何かを行うことができ、実際のHTTPレスポンスコードたい場合:

(int)((HttpWebResponse)ex.Response).StatusCode 
-1

はそれにあなたのCatchブロックから元の値をキャスト、WebExceptionオブジェクトを宣言します。その後、StatusCodeプロパティを確認することができます。参考のため

+0

'WebException'のみ** **あなたはProtocolErrorの' Status'を与えるキャッチ。目的のコード(404,400など)を取得するには、上記の応答のようにex.ResponseをHttpWebResponseにキャストする必要があります。 – ProKiner

3

は、ここで私が使用して終了実際のコードは次のとおりです。

catch (WebException ex) { 
    if (ex.Status == WebExceptionStatus.ProtocolError && 
     ((FtpWebResponse)ex.Response).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) { 
     // Handle file not found here 
    } 
関連する問題