5

问题:当我使用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被抛出。

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

4

2 回答 2

4

请点击此链接:

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

顺序改为相反

于 2011-07-29T15:27:46.620 回答
0

感谢您发布这个问题!信不信由你,三年后微软关于此功能的MSDN 文档仍然不正确。我已向ASP.NET 团队提交了一份错误报告以修复此问题。

于 2014-08-18T15:31:53.577 回答