问题:当我使用Order
属性的HandleError
属性时,首先应用最高序号,而不是最低序号。
细节
我想设置我的控制器以这种方式处理异常:
- 如果异常的类型是
CustomException
,请使用“CustomError”视图。 - 否则,使用默认的“错误”视图。
使用默认的 MVC 项目模板,我完成了以下操作:
HandleErrorAttribute
从全局过滤器中删除了。- 在
web.config
.
然后我将这些属性添加到HomeController
类中:
[HandleError(ExceptionType = typeof(Exception), View = "Error")]
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")]
这很好用 - 如果CustomException
抛出 a ,则会显示“CustomError”视图;如果Exception
抛出 an,则显示“错误”视图。
但是,我认为Order
属性上的HandleError
属性会使事情更加明确。从MSDN 页面:
整数值越大,过滤器的优先级越低。
由此,我认为以下代码会导致在所有情况下都显示“错误”视图:
[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")]
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")]
但这种情况并非如此; Order
这会导致与未指定属性时相同的行为。如果我交换订单,这会导致显示“错误”视图,即使 aCustomException
被抛出。
基本上,实际的订单优先级似乎与文档完全相反。我做错了什么还是这是一个错误?