Error handling 只应运行第一个MVC ErrorHandler属性
我正在尝试使用MVC自定义错误,以便只记录意外的控制器错误 为此,我创建了一个“HandleAndLogError”属性,它继承自HandleErrorAttribute。我只希望在方法上的其他错误处理程序属性未涵盖异常时运行HandleAndLogError属性 例如:Error handling 只应运行第一个MVC ErrorHandler属性,error-handling,asp.net-mvc-5,Error Handling,Asp.net Mvc 5,我正在尝试使用MVC自定义错误,以便只记录意外的控制器错误 为此,我创建了一个“HandleAndLogError”属性,它继承自HandleErrorAttribute。我只希望在方法上的其他错误处理程序属性未涵盖异常时运行HandleAndLogError属性 例如: [HandleAndLogError(View = "Error", Order = -1)] public class MyController : Controller { [HandleErrorWithoutL
[HandleAndLogError(View = "Error", Order = -1)]
public class MyController : Controller
{
[HandleErrorWithoutLogging(ExceptionType = typeof(InvalidOperationException), View = "Error", Order = 0)]
public ActionResult SomeAction()
{
...
}
}
当某个操作引发InvalidOperationException时,我只希望HandleError不进行日志处理。
但发生的情况是,HandleError在不进行日志记录的情况下运行,然后HandleAndLogError在之后直接运行
有没有一种简单的方法可以让第一个错误处理程序阻止其他人运行?我找出了我的错误所在,结果证明它非常简单。在传递给处理程序的上下文中有一个ExceptionHandled标志,该标志在基本代码运行时设置为true。我只需要用if块包装我的代码 对于任何想知道的人,这就是我的结局:
public class HandleErrorWithLoggingAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if(!filterContext.ExceptionHandled)
{
base.OnException(filterContext);
if (filterContext.ExceptionHandled)
{
...
}
}
}
}