在ASP.NET MVC应用程序中使用HandleErrorAttribute
我有一个关于在我的MVC 5应用程序中使用HandleErrorAttribute的最佳方法的问题。 我们知道,我们可以将此属性添加到全局filter中:
filters.Add(new HandleErrorAttribute{View = "Error"});
这涉及应用程序每次在任何级别的应用程序中抛出未处理的exception时显示“错误”视图。 但是,如果我在其他全局授权或动作filter中有一些逻辑,那产生一些exception,比第一次出现exception时,那么app尝试重定向到Error View,再次其他filter开始执行并再次产生相同的exception,所以asp .net以避免此循环终止应用程序。 那么如何使用这个HandleErrorAttribute来避免这种行为的最佳方法呢? 谢谢!
编辑:经过一些调试我发现这不是HandleErrorAttribute的常见行为,所以只有当我使用自定义路由fe时才会出现这种循环
{key}/{controller}/{action}
当filter逻辑中出现一些错误时,app尝试重定向到错误视图,但是另一个filter逻辑再次开始执行,我甚至在{key}路由参数中看到“错误”值,因此这是不需要的行为。 当我使用默认路由{controller}/{action}
这不会发生,并且我完全得到错误视图而没有第二次执行任何全局filter逻辑。
您应该将动作filter逻辑包装在try
catch
,然后在catch
块内,重定向到Error
视图并传递Exception
。
您唯一的另一种选择是完全抛弃HandleError
并使用Global.asax中的Application_Error
事件来管理您的error handling。 这样,无论发生错误的位置,您都可以重定向到其中的Error
操作。
对于global.asax来说Matt是正确的…这是我遵循的例子http://www.digitallycreated.net/Blog/57/getting-the-correct-http-status-codes-out-of-asp.net-自定义错误页
然后在每个视图中我添加:Response.StatusCode = 500; 或者我希望向客户展示其他代码。
- 如何在html动作链接中插入图像? asp.net mvc
- 控制器错误“Microsoft.AspNetCore.Mvc.Rendering.SelectListItem”中的MVC Core SelectList下拉列表
- 获取淘汰模型中的MVC人员模型书列表(可观察数组)
- 将Base64图像发布到Mvc控制器
- 做强类型ASP.NET MVC会话的更好方法
- 显示MVC中文件夹中的所有图像。 带着foreach
- 如何在卸载时通过Wix删除生成的文件夹和文件?
- 使用asp.net mvc beta进行强类型的动作链接?
- 如何在Entry.state == EntityState.Added的位置设置自定义validation