1

httpRequest を送信し、try ブロックで httpResponse を取得します。現在、いくつかの理由で、どのタイプの例外が発生するかは本当に気にしません。

try
     {
        var request = WebRequest.Create(new Uri("MyUrl")) as HttpWebRequest;
        request.GetResponse();
     }
catch(Exception)
    {
    }

FxCop は私に特定の例外を与えることを望んでいるので、私の場合は次のようにいくつかの catch ブロックを作成する必要があります。

NotSupportedException
ArgumentNullException
SecurityException
InvalidOperationException
ProtocolViolationException
NotSupportedException
WebException

この警告に対処し、これらの多くの catch ブロックを同時に書き込まないようにするにはどうすればよいですか?

4

4 に答える 4

4

このトピックで尋ねられた別の質問と同様に、例外をキャッチする場合throwは、警告が表示されないようにするために、ハンドラー内にファイナルが必要です。

この警告に関するMSDN ドキュメントから:

この規則違反を修正するには、より具体的な例外をキャッチするか、catch ブロックの最後のステートメントとして一般的な例外を再スローします。

とはいえ、例外を再スローするのではなく、「飲み込み」たいので、これはあなたの状況では本当に役に立ちません。この 6 つの特定の例外のリストを見ると、可能な限り最も推奨される方法でそれぞれの例外を処理するのに時間 (真剣に 5 分程度) を費やすのが苦痛な経験になるとは想像できません。これはそれほど頻繁に発生するわけではなく、WebRequest はそのまれな例の 1 つにすぎません。

アプリケーションの有効期間が長い場合は、時間が経つにつれて、これらの例外のそれぞれに対してハンドラーを実装していることに気付く可能性があります。「一般的なエラー 405 が発生しました」というエラー メッセージが好きな人はいません。これは KISS ではないかもしれませんが、基礎を整えることで、すべての例外 ( などOutOfMemoryException) のキャッチを回避できるという利点が得られ、FxCop の警告 (およびうるさい開発者からの軽蔑) も防ぐことができます。

アプリケーションで大量の WebRequest を生成している場合、次のようなヘルパー クラスが役立つ可能性があります。これは、単一のエラー メッセージをスローし、WebFetcherExceptionさらに役立つエラー メッセージを表示します。次に例を示します。

public static class WebFetcher
{
    public WebResponse FetchFromUrl(Uri uri)
    {
        try
        {
            var request = WebRequest.Create(new Uri("MyUrl")) as HttpWebRequest;
            return request.GetResponse();
        }
        catch (NotSupportedException ex)
        {
            //you could customize the error messages to be more suitable for your
            //application, or leaving room for future error handling
            throw new WebFetcherException(ex.Message, ex);
        }
        catch (ArgumentNullException ex)
        {
            throw new WebFetcherException(ex.Message, ex);
        }
        catch (SecurityException ex)
        {
            throw new WebFetcherException(ex.Message, ex);
        }
        catch (ProtocolViolationException ex)
        {
            throw new WebFetcherException(ex.Message, ex);
        }
        catch (WebException ex)
        {
            throw new WebFetcherException(ex.Message, ex);
        }
        catch (InvalidOperationException ex)
        {
            throw new WebFetcherException(ex.Message, ex);
        }
    }

    public class WebFetcherException : Exception
    {
        public WebFetcherException(string message, Exception inner)
            : base(message, inner)
        { }
    }
}
于 2012-04-13T20:21:15.263 に答える
3

いくつかの警告を無効にすることができます。私は常にこの警告を無効にしています :-)

于 2012-04-11T21:02:12.070 に答える
2

fxCop の警告は提案であり、命令ではありません。

つまり、fxCop のガイドラインや提案に従うかどうかは、自由に判断してください。

この特定の提案があるのは、さまざまな種類のエラーを異なる方法で処理したい可能性が高いためです。そうでない場合は、このルールを無視して、警告リストが乱雑にならないようにすることができます。

fxCop よりもビジネス ルールとコーディング標準をよく知っています。特定の状況に当てはまる場合と当てはまらない場合があるベスト プラクティスに基づいて提案を行っているだけです。

詳細については、http: //msdn.microsoft.com/en-us/library/bb429303 (VS.80).aspx を参照してください。

于 2012-04-11T21:04:02.793 に答える
-1

空のままにしてみてください

try
{
        var request = WebRequest.Create(new Uri("http://localhost:59449/stwebapi/getstatus?userId=" + wwId)) as HttpWebRequest;
        request.GetResponse();
     }
catch
{

}

これは非常に悪い設計であると言う必要があるため、ガイドラインに従うFxCopか、少なくとも例外を処理してログに記録することをお勧めします (少なくとも)

于 2012-04-11T20:58:28.870 に答える