【发布时间】:2014-01-03 15:45:06
【问题描述】:
我在一个 asp.net、mvc4 网络应用程序中使用 Elmah 和 Elmah.mvc 包。我有一个特定的控制器操作,我想以特定方式处理HttpAntiForgeryExceptions。我创建了一个继承自HandleErrorAttribute 并实现IExceptionFilter 的自定义HandleErrorAttribute。
根据我要处理的具体情况,我将ExceptionContext.ExceptionHandled设置为true。用户看到的行为是正确的,错误会按我想要的方式处理。但是,它也会向 Elmah 记录一个错误,我不希望它这样做,因为我想保留 Elmah 日志以查找真正的错误。
控制器注解如下:
[ValidateAntiForgeryToken]
[CustomHandleAntiforgeryError]
public ActionResult ControllerMethod(Model model)
{
...
}
CustomHandleAntiforgeryError 看起来像:
public class CustomHandleAntiforgeryErrorAttribute:
HandleErrorAttribute, IExceptionFilter
{
public override void OnException(ExceptionContext filterContext)
{
if (circumstancesAreOk)
{
filterContext.ExceptionHandled = true;
return;
}
}
}
我还需要做些什么来防止 Elmah 记录此错误吗?
--- 编辑---
查看 Elmah.MVC 源,HandleErrorAttribute 记录已处理和未处理的错误
public override void OnException(ExceptionContext context)
{
base.OnException(context);
if (!context.ExceptionHandled) // if unhandled, will be logged anyhow
return;
var e = context.Exception;
var httpContext = context.HttpContext.ApplicationInstance.Context;
if (httpContext != null &&
(RaiseErrorSignal(e, httpContext) // prefer signaling, if possible
|| IsFiltered(e, httpContext))) // filtered?
return;
LogException(e, httpContext);
}
我想在我的自定义属性中使用一种方式向 Elmah 发出信号,不要记录此错误,并希望有任何想法。
【问题讨论】:
-
祝你好运。从上面的 EDIT 中看,如果处理了异常,Elmah 会从方法中返回?
-
描述了我所做的,这对我有用,但不是解决很多问题的好方法。
标签: asp.net asp.net-mvc-4 elmah