Manejo de excepciones de API web ASP.NET Core

Comencé a usar ASP.NET Core para mi nuevo proyecto de API REST después de usar ASP.NET Web API durante muchos años. No veo una buena manera de manejar las excepciones en ASP.NET Core Web API. Traté de implementar el filtro / atributo de manejo de excepciones:

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
        };
    }
}

Y aquí está mi registro de filtro de inicio:

services.AddMvc(options =>
{
    options.Filters.Add(new AuthorizationFilter());
    options.Filters.Add(new ErrorHandlingFilter());
});

El problema que estaba teniendo es que cuando ocurre una excepción en miAuthorizationFilter no está siendo manejado porErrorHandlingFilter. Esperaba que fuera atrapado allí al igual que funcionaba con la antigua API web ASP.NET.

Entonces, ¿cómo puedo detectar todas las excepciones de la aplicación, así como cualquier excepción de los filtros de acción?

Respuestas a la pregunta(7)

Su respuesta a la pregunta