7

でエラーを処理する場合Application_Error、これら2つのうちどちらを使用する必要がありますか?

私は両方の例を複数見つけていますが、一方が他方より優れているかどうかははっきりしていません。1つだけが正しいエラーを表示する場合がありますか?

また、これが問題になるとは思えませんが、アプリケーションはMVC4を使用しています。

4

1 に答える 1

7

それはあなたが正確に何を必要としているかによります。

Exception.GetBaseExceptionのドキュメントから:

派生クラスでオーバーライドされると、1つ以上の後続の例外の根本原因である例外を返します。

Application_Errorおそらくいくつかの例外処理メカニズムの後で、上位レベルで例外を処理します。したがって、例外が次のようにスローされた場合:

try {
   //Lots of code, method calls, etc...
   try {
       throw new FooException("Foo");
   } catch(FooException fe) {
       throw new BarException("Bar", fe);
   }
}catch(BarException be) {
    throw new FooBarException("FooBar", be);
}

その後、GetLastErrorあなたを取得しますがFooBarException、あなたGetLastError().GetBaseException()を取得しますFooException。したがって、前者は実際の未処理の例外を返し、後者は根本原因を返します。

Foo、Bar、FooBarの例外クラスはオーバーライドしないと思いGetLastErrorますInnerException

于 2013-02-26T09:41:50.120 に答える