0

我需要一种方法来处理和记录在一个地方发生在web api中的所有异常。 我重写了ExceptionLogger和ExceptionHandler的方法,但代码中断并且从不触发处理机制。ASP.NET WEB API 2:异常处理程序和记录器不处理所有错误

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在更高级别引起的错误?以及我应该怎么做来处理所有的错误,是例外过滤器也必须添加的解决方案?

回答

0

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

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()); 
+0

我已经添加了异常过滤器,但它也不起作用。我也尝试创建自己的异常并抛出它们,但它没有触发任何异常过滤器或exceptionLogger。我不知道可能是我错过了什么。 – Coding

+0

我可能是错的,但我不认为你的'多个动作被发现匹配请求:'错误将由任何代码处理处理....我可能是真的错了。无论如何,我不会期待它。 –

+0

是的,因为它在执行动作之前就已经发生了。但是,为什么任何机制都不会处理动作本身内部引发的错误,比如“抛出新的Exception()”。 – Coding