Elmah不发送有关WebAPI异常的电子邮件

Rau*_*jar 1 elmah asp.net-web-api elmah.mvc

我已经设置了elmah来通过包含一个webapi事件的httpfilter来拾取webapi异常,如ELMAH和MVC4中的API控制器中所述,不记录错误。
它可以正常工作,我可以看到错误进入了elmah db,问题是errorMail模块没有尽管它可以正常执行操作,但似乎没有问题,但
我似乎没有能力将其删除,因此我已经删除了所有错误过滤器,这也不是为什么不发送电子邮件的原因。
我还尝试通过在global.asax中添加一个无效的ErrorMail_Filtering(object sender,ExceptionFilterEventArgs args)方法来为电子邮件设置特殊的过滤器,但是对于webapi异常,它甚至从未达到(对于非webapi异常,它可以正常工作)
其他人遇到了这个问题,知道如何解决吗?我讨厌不得不更换Elmah电子邮件过滤器...

Jer*_*ook 6

我之所以用Elmah.ErrorSignal.FromCurrentContext().Raise(...)代替,是Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(...)因为所有配置的错误记录器都将有机会使用该异常。因此,例外情况将出现在Elmah.axd中,我将收到一封电子邮件。如果我使用Log它,只会转到默认的错误记录器,并且不会收到电子邮件。

在旁边

Web API 2.1改进了全局错误处理。如果可以使用v2.1,我建议您采用这种方式。

public class UnhandledExceptionLogger : ExceptionLogger
{
    public override void Log(ExceptionLoggerContext context)
    {
        Elmah.ErrorSignal.FromCurrentContext().Raise(context.Exception);
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用它,请使用HttpConfiguration注册它,如下所示:

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services
    // ...
    config.Services.Add(typeof(IExceptionLogger), new UnhandledExceptionLogger());

    // Web API routes
    // ...
}
Run Code Online (Sandbox Code Playgroud)