16

アプリケーション全体のエラーを処理し、asp.netmvcでErrorViewページを表示したいと思います。それを行うには3つの方法があります(または私は知っています)。

1) ErrorAttribute in BaseController:Controller class.
     Can be used on individual Action/Controller/BaseController.
2) Override OnException() in the BaseController:Controller class.
     Will work on Controllers derived from BaseController
3) Application_Error in Global_aspx.

ベストプラクティスは何ですか。これらの方法のどれをアプリケーション全体のエラー処理に使用するか、複数または1つだけを使用する必要があります。

ErrorAttributeまたはBaseControllerのOnException()でエラーを処理する場合でも、Application_Error()で処理する必要があります。

いつApplication_Error()を使用する必要がありますか?

4

2 に答える 2

11
  1. HandleErrorAttribute属性を介して適用されるMVCフィルターです。例外が発生した場合に表示するビュー名を指定できます。また、このフィルターが適用される例外の基本(または特定の)タイプを指定することもできます。ビュー名が指定されていない場合は、「エラー」という名前のビューが検索されます。すでにお気づきのように、さまざまなスコープに適用できます。例外に基づいて、別の「エラーページ」ビューを指定できます。

  2. Controller.OnExceptionアクションのいずれかがエラーをスローすることになった場合に呼び出されるメソッドです。

  3. 上記の2つは両方ともMVCの概念であり、ASP.NETパイプラインの上にあるMVCパイプラインの一部であり、上記を使用して例外を処理すると、に伝播されませんがApplication_Error、httpエラー404、500などが発生します。正しく覚えていればそうなるでしょう。

何を使う?

アプリケーション全体のエラーログについてはELMAHを確認し、ELMAHとASP.NETMVCに関するブログ投稿を確認してください。

[HandleError]エラーページの表示に関しては、とを使用するだけで問題ないはずです。これはHandleErrorAttribute、すでにすべてを処理しているためです(オプションのフィルタリングと例外タイプごとのオプションのカスタムエラーページ)。

于 2011-06-11T21:15:09.487 に答える
0

アプリケーションレベルでエラーを処理する場合は、コントローラーにHandleErrorまたはOnExceptionOverrideを適用しないでください。

Application_Errorハンドラーのサーバーオブジェクトから最後のエラーを取得してみてください。例外タイプを確認し、例外タイプに基づいて、実行するアクションを定義します。

404の場合、処理するコントローラーに別のアクションを設定することをお勧めします。

500の場合、処理するコントローラーに別のアクションを設定することをお勧めします。

NON HTTPException(SQLException)の場合は、電子メールを送信することもできます。

SEOの目的で正しい応答ステータスコードを設定していることを確認してください。

于 2011-06-12T07:08:50.617 に答える