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