ASP.Net MVC 3 - HandleError属性中的Order似乎是反向工作的?

5

问题: 当我使用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”。基本上,实际顺序优先级似乎完全与文档相反。我做错了什么还是这是一个错误?
2个回答

4

0

感谢您发布这个问题!信不信由你,微软的MSDN文档在这个功能上仍然错误了三年。我已经向ASP.NET团队提交了一个错误报告以解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接