不要使用ELMAH记录处理的异常

时间:2014-01-27 09:05:25

标签: c# logging exception-handling elmah

我正在使用WebApi和ELMAH,我希望能够将一些业务错误包装到Web响应中以解决一些异常(无记录)并让其他人记录ELMAH。对不,我有这段代码。

public async override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
        {
            try
            {
            return await base.ExecuteAsync(controllerContext, cancellationToken);
            }
            catch (MyException ex)
            {
                return new HttpResponseMessage(CustomCode)
                {
                    Content = new StringContent(CustomMessage)
                };
            }          
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
                return new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        Content = new StringContent("Ups! Something went wrong. Please try again or contact administrator!")
                    };
            }
        }

问题是我希望ELMAH只记录未处理的异常。在我的例子中,即使是类型MyException的异常被记录,尽管它被catch块捕获。

我是否可以向ELMAH申请任何配置,使其仅记录未处理的电子邮件?

1 个答案:

答案 0 :(得分:0)

ELMAH捕获从您的网络应用程序抛出的所有异常。如果您想过滤掉某些错误,可以使用ELMAH的错误过滤功能,如下所述:

https://code.google.com/p/elmah/wiki/ErrorFiltering

在您的情况下,您可能需要在global.asax.cs中添加类似的内容:

void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.GetBaseException() is MyException)
        e.Dismiss();
}