我正在使用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申请任何配置,使其仅记录未处理的电子邮件?
答案 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();
}