問題:属性のOrderプロパティを使用すると、最も低い順序番号が最初に適用されるのではなく、最も高い順序番号が最初に適用されます。HandleError
詳細
この方法で例外を処理するようにコントローラーを設定したいと思います。
- 例外のタイプが の場合は
CustomException、"CustomError" ビューを使用します。 - それ以外の場合は、デフォルトの「エラー」ビューを使用してください。
デフォルトの MVC プロジェクト テンプレートを使用して、次のことを行いました。
HandleErrorAttributeグローバルフィルターから削除しました。- でカスタム エラーをオンにしました
web.config。
HomeController次に、これらの属性をクラスに追加します。
[HandleError(ExceptionType = typeof(Exception), View = "Error")]
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")]
そして、これは正常に動作します - aCustomExceptionがスローされた場合、「CustomError」ビューが表示されます。がスローされた場合Exception、「エラー」ビューが表示されます。
Orderただし、属性のプロパティにより、HandleError物事がより明確になると思いました。MSDN ページから:
整数値が大きいほど、フィルタの優先度は低くなります。
このことから、次のコードにより、すべての状況で「エラー」ビューが表示されると思いました。
[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")]
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")]
しかし、そうではありません。Orderこれにより、プロパティが指定されていない場合と同じ動作が発生します。注文を交換するとCustomException、がスローされた場合でも、「エラー」ビューが表示されます。
基本的に、実際の注文の優先度はドキュメントとは正反対のようです。私は何か間違ったことをしていますか、それともこれはバグですか?