問題:属性の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
、がスローされた場合でも、「エラー」ビューが表示されます。
基本的に、実際の注文の優先度はドキュメントとは正反対のようです。私は何か間違ったことをしていますか、それともこれはバグですか?