Manipulação de exceção da API da Web do ASP.NET Core
Comecei a usar o ASP.NET Core para o meu novo projeto de API REST depois de usar a API da Web ASP.NET regular por muitos anos. Não vejo uma boa maneira de lidar com exceções na API da Web do ASP.NET Core. Tentei implementar o filtro / atributo de tratamento de exceções:
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
};
}
}
E aqui está o meu registro de filtro de inicialização:
services.AddMvc(options =>
{
options.Filters.Add(new AuthorizationFilter());
options.Filters.Add(new ErrorHandlingFilter());
});
O problema que eu estava tendo é que, quando ocorrem exceções no meuAuthorizationFilter
não está sendo tratado porErrorHandlingFilter
. Eu esperava que fosse pego lá, exatamente como funcionava com a antiga API da Web do ASP.NET.
Então, como posso capturar todas as exceções de aplicativos e de filtros de ação?