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?