1

ASP.NET MVC3 アプリケーションで、予期しない問題をすべてログに記録したいと考えています。だから私は内部にログインしていApplication_Error()ます。またController.OnException()、メソッドがあることがわかったので、エラーをログに記録してから呼び出すコントローラーのオーバーライドを作成しましたbase.OnException()

コントローラーアクションで例外が発生するたびに、OnException()オーバーライドが呼び出されてからApplication_Error()呼び出されるため、ログが2回実行されるようです。

OnException()オーバーライドを削除し、ログインのみを残した場合Application_Error()、すべての問題を引き続きログに記録しますか、それとも何らかの種類のイベントを見逃すことになりますか?

4

1 に答える 1

0

Controller.OnException() は MVC 固有です。Application_Error() は ASP.NET 固有です。MVC は ASP.NET の上にあるため、Controller.OnException() で例外を処理する場合は、例外がパイプラインを介して Application_Error() に伝播しないように、ExceptionContext の ExceptionHandled を true に設定することをお勧めします。

すべてのエラーを Application_Error() レベルに伝播させ、そこで処理できるという点で、あなたは正しいです。それは本当に選択と好みに依存すると思います。私はそれを両方の方法で見ています。Controller の OnException でのアクション メソッド固有のエラーや、Application_Error で要求がコントローラーに到達しない場合のその他のエラー (起動エラー、404 など) を処理する利点が見られます。MVC と Web フォームの両方を使用するハイブリッド アプリがある場合、Web フォーム エラーには Application_Error を使用する必要があります。

そのため、 Application_Error() で例外を処理することは、アプリで例外がキャッチされないことを確認するために必須ですが、Controller.OnException() を使用することは、エラーの特定のサブセットを処理するための好みの問題です。

于 2013-02-21T22:49:23.823 に答える