ASP.NET WEB API 2:异常处理程序和记录程序不处理所有错误

时间:2016-09-23 16:50:37

标签: c# error-handling exception-handling asp.net-web-api2 action-filter

我需要一种方法来处理和记录web api中出现的所有异常。 我重写了ExceptionLogger和ExceptionHandler的方法,但代码中断并且从不触发处理机制。

enter image description here

如果我将控制器更改为必须使用相同的API方法,这会导致另一个错误:

[RoutePrefix("api/Ads")]
public class AdsController : ApiController
{
    public IHttpActionResult Get()
    {
        return Ok(Ad.GetAds());
    }
    public IHttpActionResult Get(object name)
    { 
        return Ok();
    }
}

处理程序将捕获错误:

enter image description here

在这种情况下,错误是:

  Multiple actions were found that match the request: 

ExceptionLogger和ExceptionHandler是否只捕获由更高级别的web api引起的错误?我应该怎样做才能处理所有错误,异常过滤器还必须添加解决方案吗?

2 个答案:

答案 0 :(得分:2)

添加例外过滤器:

 public class MyExceptionFilter:ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext context)
    {
        var t = HandleException(context);

        t.Wait();
    }

    public override async Task OnExceptionAsync(HttpActionExecutedContext context, CancellationToken cancellationToken)
    {
       await HandleException(context);
    }

    private Task HandleException(HttpActionExecutedContext context)
    {
        context.Response = context.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, context.Exception.Message);

        return Task.CompletedTask;
    }
}

然后在您的WebApiConfig.Register方法中添加以下行:

config.Filters.Add(new MyExceptionFilter());

答案 1 :(得分:0)

ExceptionLogger和Filter没有捕获任何错误,因为项目处于调试模式,在调试模式下,它会抛出异常并停在那里,而在发布模式下,异常会被记录器或过滤器捕获。