Behandlung von ASP.NET Core-Web-API-Ausnahmen

Ich habe begonnen, ASP.NET Core für mein neues REST-API-Projekt zu verwenden, nachdem ich viele Jahre lang die reguläre ASP.NET-Web-API verwendet habe. Ich sehe keine gute Möglichkeit, mit Ausnahmen in der ASP.NET Core-Web-API umzugehen. Ich habe versucht, Filter / Attribut für die Ausnahmebehandlung zu implementieren:

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

Und hier ist meine Registrierung für den Startfilter:

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

Das Problem, das ich hatte, ist, dass, wenn Ausnahme in meinem @ auftriAuthorizationFilter es wird nicht von @ gehandhaErrorHandlingFilter. Ich hatte erwartet, dass es dort abgefangen wird, so wie es mit der alten ASP.NET-Web-API funktioniert.

Wie kann ich alle Anwendungsausnahmen sowie alle Ausnahmen von Aktionsfiltern abfangen?

Antworten auf die Frage(14)

Ihre Antwort auf die Frage