10

MVC 5 アプリケーションで HandleErrorAttribute を使用する最善の方法について質問があります。ご存知のように、この属性を次のようにグローバル フィルターに追加できます。

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

これには、未処理の例外がアプリの任意のレベルでスローされるたびに、アプリが「エラー」ビューを表示することが含まれます。ただし、別のグローバル承認フィルターまたはアクション フィルターに何らかの例外を生成するロジックがある場合、例外が初めてスローされたときに、アプリはエラー ビューにリダイレクトしようとし、再び他のフィルターの実行が開始され、同じ例外が生成されます。繰り返しますが、ループを避けるためにasp.netはアプリを終了します。では、この HandleErrorAttribute を使用してそのような動作を回避する最善の方法は何ですか? ありがとう!

編集: いくつかのデバッグの後、これはHandleErrorAttributeの通常の動作ではないことがわかったので、カスタムルートfeを使用する場合にのみループが発生します

{key}/{controller}/{action}

フィルター ロジックで何らかのエラーが発生すると、アプリはエラー ビューにリダイレクトしようとしますが、別のフィルター ロジックが再び実行を開始し、{key} ルート パラメーターに「エラー」値が表示されるので、不要です。行動。デフォルト ルートを使用すると、{controller}/{action} これは発生せず、グローバル フィルタ ロジックを 2 回実行しなくても、正確にエラー ビューに到達します。

4

2 に答える 2

10

アクション フィルター ロジックを 内にラップしtry catchcatchブロック内でErrorビューにリダイレクトしてException.

他の唯一の選択肢は、HandleError完全に捨てApplication_Errorて Global.asax 内のイベントを使用してエラー処理を管理することです。Errorそうすれば、エラーが発生した場所に関係なく、その中のアクションにリダイレクトできます。

于 2013-09-26T10:59:24.567 に答える