7

を作成して実行するとしましょうSystem.Net.FtpWebRequest

catch (WebException ex) {}このリクエストによってスローされた Web 関連の例外をキャッチするために使用できます。しかし、例外がスローされたときにのみ実行したいロジックがある場合はどうすればよい(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」が含まれている場合にも true を返します。

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

4

3 に答える 3

14

WebExceptionStatusCode確認できるプロパティを公開します。

実際の HTTP 応答コードが必要な場合は、次のようにすることができます。

(int)((HttpWebResponse)ex.Response).StatusCode
于 2009-03-23T18:51:18.330 に答える
3

参考までに、実際に使用したコードは次のとおりです。

catch (WebException ex) {
    if (ex.Status == WebExceptionStatus.ProtocolError &&
        ((FtpWebResponse)ex.Response).StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) {
        // Handle file not found here
    }
于 2009-03-23T21:46:52.197 に答える
-1

WebException オブジェクトを宣言し、Catch ブロックから ex 値をそれにキャストします。その後、StatusCode プロパティを確認できます。

于 2009-03-23T19:06:37.623 に答える