在ASP.NET MVC应用程序中使用HandleErrorAttribute

igo*_*GIS 10 c# asp.net-mvc attributes asp.net-mvc-5

我有一个关于在我的MVC 5应用程序中使用HandleErrorAttribute的最佳方法的问题.我们知道,我们可以将此属性添加到全局过滤器中:

 filters.Add(new HandleErrorAttribute{View = "Error"});
Run Code Online (Sandbox Code Playgroud)

这涉及应用程序每次在任何级别的应用程序中抛出未处理的异常时显示"错误"视图.但是,如果我在其他全局授权或动作过滤器中有一些逻辑,产生一些异常,比第一次出现异常时,则app尝试重定向到Error View,再次其他过滤器开始执行并再次产生相同的异常,所以asp .net以避免此循环终止应用程序.那么如何使用这个HandleErrorAttribute来避免这种行为的最佳方法呢?谢谢!

编辑: 经过一些调试后我发现这不是HandleErrorAttribute的常见行为,所以只有当我使用自定义路由时才会出现这种循环

{key}/{controller}/{action}
Run Code Online (Sandbox Code Playgroud)

当过滤器逻辑中出现一些错误时,app会尝试重定向到错误视图,但是另一个过滤器逻辑再次开始执行,我甚至在{key}路由参数中看到"错误"值,因此这是不需要的行为.当我使用默认路由时,{controller}/{action} 这不会发生,我完全得到错误视图而没有第二次执行任何全局过滤器逻辑.

mat*_*mmo 9

您应该将动作过滤器逻辑包装在a中try catch,然后在catch块内部,重定向到Error视图并传递Exception.

您唯一的另一种选择是HandleError彻底抛弃并使用Application_ErrorGlobal.asax中的事件来管理您的错误处理.这样Error,无论错误发生在何处,您都可以重定向到此处的操作.

  • @mattytommo 出于好奇,你对 elmah 有什么看法? (3认同)