In der ASP.NET Core-Web-API unterscheidet sich die Ausnahmebehandlung erheblich von der herkömmlichen ASP.NET-Web-API. Obwohl Ausnahmebehandlungsfilter verwendet werden können, unterliegen sie bestimmten Einschränkungen.
Im bereitgestellten Beispiel kann ErrorHandlingFilter
die Ausnahme in AuthorizationFilter
nicht abfangen. Dies liegt daran, dass Filter nacheinander ausgeführt werden und jeder Filter für die Behandlung seiner eigenen Ausnahmen verantwortlich ist. Wenn in einem vorherigen Filter eine Ausnahme ausgelöst wird, wird die Ausführung nachfolgender Filter unterbrochen.
Um Ausnahmen für alle Filter, einschließlich Anwendungsausnahmen, zu behandeln, können Sie die IExceptionHandler
-Schnittstelle nutzen. So geht's:
<code class="language-csharp">using Microsoft.AspNetCore.Diagnostics; class MyExceptionHandler : IExceptionHandler { public async ValueTask<bool> TryHandleAsync( HttpContext context, Exception exception, CancellationToken cancellation) { // 异常响应对象 var error = new { message = exception.Message }; await context.Response.WriteAsJsonAsync(error, cancellation); return true; } }</code>
Middleware-Registrierung:
Registrieren Sie sich wie folgt MyExceptionHandler
Middleware:
<code class="language-csharp">builder.Services.AddExceptionHandler<MyExceptionHandler>(); app.UseExceptionHandler(_ => { });</code>
Diese Middleware fängt alle Ausnahmen ab und behandelt sie, auch solche von Filtern.
Wichtige Punkte:
IExceptionHandler
Die Implementierung kann Aufrufe in der Reihenfolge der Registrierung verketten. TryHandleAsync
von true
zurück, wenn die Ausnahme behandelt wurde. Andernfalls geben Sie false
zurück, um die Ausnahme an den nächsten Handler zu übergeben. Das obige ist der detaillierte Inhalt vonWie kann ich Ausnahmen von allen Filtern, einschließlich Autorisierungsfiltern, in ASP.NET Core-Web-APIs behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!