2013-09-26 12 views
10

MVC 5アプリケーションでHandleErrorAttributeを使用する最良の方法について質問があります。 私たちが知っているように、我々はそのようなグローバルフィルタにこの属性を追加することができます。ASP.NET MVCアプリケーションでHandleErrorAttributeを使用する

filters.Add(new HandleErrorAttribute{View = "Error"}); 

これは、未処理の例外は、アプリケーションの任意のレベルでスローするたびに表示「エラー」を表示するようにアプリを伴います。 しかし、他のグローバル認可またはアクションフィルタにいくつかのロジックが含まれていて、例外が発生した場合、最初に例外が発生したときよりもエラービューにリダイレクトしようとすると、もう一度他のフィルタが実行を開始し、このループを終了するアプリを避けるためにasp.net。 このような動作を避けるために、このHandleErrorAttributeを使用する最良の方法は? ありがとう!

編集:私はこれがHandleErrorAttributeの通常の動作ではありませんので、私は、カスタムルートを使用する場合にのみ、このループが私のために起こることがわかったいくつかのデバッグ後 f.e.

{key}/{controller}/{action} 

と、いくつかのエラーは、フィルタロジックで発生した場合に、そのアプリが表示をE​​rrorにリダイレクトしようとしたが、再び別のフィルタロジックはexectueを開始し、私はそうであっても、{キー}ルートのパラメータに「エラー」の値を参照してくださいそれは望ましくない行動です。 デフォルトルートを使用する場合 {controller}/{action} これは起こらず、グローバルフィルタロジックを2回実行することなくエラービューに正確になります。

答えて

9

その後、catchブロック内で、Errorビューにリダイレクトし、Exceptionを渡し、trycatchの内側にあなたの行動のフィルタロジックをラップする必要があります。

唯一の代替方法は、HandleErrorを完全に捨てて、エラー処理を管理するためにGlobal.asax内のApplication_Errorイベントを使用することです。そうすれば、どこにエラーが発生したかにかかわらず、内部のErrorアクションにリダイレクトできます。

+0

ありがとうございます!これは素晴らしいアプローチです。 – igorGIS

+0

ELMAHはどうですか? –

+1

@Murali正直言ってELMAHのファンではありません – mattytommo

関連する問題