Обработка исключений веб-API ASP.NET CoreC#

Место общения программистов C#
Ответить
Anonymous
 Обработка исключений веб-API ASP.NET Core

Сообщение Anonymous »

Я использую ASP.NET Core для своего нового проекта REST API после многих лет использования обычного веб-API ASP.NET. Я не вижу хорошего способа обработки исключений в веб-API ASP.NET Core. Я попытался реализовать фильтр/атрибут обработки исключений:

Код: Выделить всё

public class ErrorHandlingFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
HandleExceptionAsync(context);
context.ExceptionHandled = true;
}

private static void HandleExceptionAsync(ExceptionContext context)
{
var exception = context.Exception;

if (exception is MyNotFoundException)
SetExceptionResult(context, exception, HttpStatusCode.NotFound);
else if (exception is MyUnauthorizedException)
SetExceptionResult(context, exception, HttpStatusCode.Unauthorized);
else if (exception is MyException)
SetExceptionResult(context, exception, HttpStatusCode.BadRequest);
else
SetExceptionResult(context, exception, HttpStatusCode.InternalServerError);
}

private static void SetExceptionResult(
ExceptionContext context,
Exception exception,
HttpStatusCode code)
{
context.Result = new JsonResult(new ApiResponse(exception))
{
StatusCode = (int)code
};
}
}
А вот моя регистрация фильтра автозагрузки:

Код: Выделить всё

services.AddMvc(options =>
{
options.Filters.Add(new AuthorizationFilter());
options.Filters.Add(new ErrorHandlingFilter());
});
Проблема, с которой я столкнулся, заключается в том, что когда в моем AuthorizationFilter возникает исключение, оно не обрабатывается ErrorHandlingFilter. Я ожидал, что он будет перехвачен там точно так же, как он работал со старым веб-API ASP.NET.
Так как же мне перехватить все исключения приложений, а также любые исключения из фильтров действий?< /п>

Подробнее здесь: https://stackoverflow.com/questions/386 ... n-handling
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»