只应运行第一个MVC ErrorHandler属性

时间:2014-11-03 18:05:42

标签: error-handling asp.net-mvc-5

我尝试使用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会直接运行。

是否有一种简单的方法可以让第一个错误处理程序阻止其他人运行?

1 个答案:

答案 0 :(得分:1)

我弄清楚我哪里出错,结果很简单。在传递给处理程序的上下文中有一个ExceptionHandled标志,当基本代码运行时,该标志被设置为true。我只需要用if块包装我的代码。

对于任何想知道的人来说,这就是我最终的目标:

public class HandleErrorWithLoggingAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if(!filterContext.ExceptionHandled)
        {
            base.OnException(filterContext);

            if (filterContext.ExceptionHandled)
            {
                ...
            }
        }
    }
}