0

Мне нужен способ обработки и регистрации всех исключений, возникающих в веб-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 ошибки, вызванные веб-api на более высоком уровне? и что мне делать, чтобы справляться со всеми ошибками, являются ли фильтры исключения, решение также необходимо добавить?

ответ

0

ExceptionLogger и фильтр не ловил какие-либо ошибки, так как проект был в режиме отладки, в в режиме отладки он выдает исключение и останавливается там, в то время как в режиме освобождения исключение попадает на регистратор или фильтры.

2

Добавить Exception фильтр:

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

Да, потому что это уже происходит перед выполнением действия. Но вопрос о том, почему какой-либо из механизмов не будет обрабатывать ошибку, вызванную внутри самого действия, например «throw new Exception()». – Coding

Смежные вопросы