5

問題:属性の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、がスローされた場合でも、「エラー」ビューが表示されます。

基本的に、実際の注文の優先度はドキュメントとは正反対のようです。私は何か間違ったことをしていますか、それともこれはバグですか?

4

2 に答える 2

4

このリンクに従ってください:

http://forums.asp.net/t/1699131.aspx/1?Filter+Execution+Order+Backwards

順序が逆に変更されました

于 2011-07-29T15:27:46.620 に答える
0

この質問を投稿していただきありがとうございます。信じられないかもしれませんが、この機能に関する Microsoft のMSDN ドキュメントは、3 年経った今でも間違っています。これを修正するために、ASP.NET チームにバグ レポートを提出しました。

于 2014-08-18T15:31:53.577 に答える