我尝试使用MVC自定义错误,以便只记录意外的控制器错误。
我创建了一个' HandleAndLogError'执行此操作的属性,它继承自HandleErrorAttribute。如果方法上的其他错误处理程序属性未涵盖异常,我只希望运行HandleAndLogError属性。
例如:
[HandleAndLogError(View = "Error", Order = -1)]
public class MyController : Controller
{
[HandleErrorWithoutLogging(ExceptionType = typeof(InvalidOperationException), View = "Error", Order = 0)]
public ActionResult SomeAction()
{
...
}
}
当SomeAction引发InvalidOperationException时,我只希望HandleErrorWithoutLogging来处理它。 但是,HandleErrorWithoutLogging会运行,然后HandleAndLogError会直接运行。
是否有一种简单的方法可以让第一个错误处理程序阻止其他人运行?
答案 0 :(得分:1)
我弄清楚我哪里出错,结果很简单。在传递给处理程序的上下文中有一个ExceptionHandled标志,当基本代码运行时,该标志被设置为true。我只需要用if块包装我的代码。
对于任何想知道的人来说,这就是我最终的目标:
public class HandleErrorWithLoggingAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if(!filterContext.ExceptionHandled)
{
base.OnException(filterContext);
if (filterContext.ExceptionHandled)
{
...
}
}
}
}