ASP.Net MVC 3 - HandleError属性中的顺序似乎向后工作?

时间:2011-07-29 14:47:59

标签: asp.net-mvc asp.net-mvc-3 handleerror

问题:当我使用Order属性的HandleError属性时,首先应用最高订单号,而不是最低的。

详情

我想设置我的控制器以这种方式处理异常:

  • 如果异常类型为CustomException,请使用“CustomError”视图。
  • 否则,请使用默认的“错误”视图。

使用默认的MVC项目模板,我已完成以下操作:

  • 从全局过滤器中删除了HandleErrorAttribute
  • web.config
  • 中打开了自定义错误

然后我将这些属性添加到HomeController类:

[HandleError(ExceptionType = typeof(Exception), View = "Error")]
[HandleError(ExceptionType = typeof(CustomException), View = "CustomError")]

这样可以正常工作 - 如果抛出CustomException,则会显示“CustomError”视图;如果抛出Exception,则会显示“错误”视图。

但是,我认为Order属性上的HandleError属性会使事情更明确。来自MSDN page

  

整数值越大,过滤器的优先级越低   是

由此,我认为以下代码会导致在所有情况下都显示“错误”视图:

[HandleError(Order = 1, ExceptionType = typeof(Exception), View = "Error")]
[HandleError(Order = 2, ExceptionType = typeof(CustomException), View = "CustomError")]

但事实并非如此;这会导致与未指定Order属性时相同的行为。如果我交换订单, 会导致显示“错误”视图,即使抛出CustomException也是如此。

基本上,实际的订单优先级似乎与文档完全相反。我做错了还是这个错误?

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:0)

感谢您发布此问题!信不信由你,三年后微软对此功能的MSDN documentation仍然不正确。我已经向ASP.NET团队提交了bug report来解决这个问题。