Dans l'API Web ASP.NET Core, la gestion des exceptions est très différente de l'API Web ASP.NET traditionnelle. Bien que des filtres de gestion des exceptions puissent être utilisés, ils présentent certaines limites.
Dans l'exemple fourni, ErrorHandlingFilter
ne peut pas intercepter l'exception dans AuthorizationFilter
. En effet, les filtres sont exécutés séquentiellement et chaque filtre est responsable de la gestion de ses propres exceptions. Si une exception est levée dans un filtre précédent, elle interrompra l'exécution des filtres suivants.
Pour gérer les exceptions pour tous les filtres, y compris les exceptions d'application, vous pouvez tirer parti de l'interface IExceptionHandler
. Voici comment procéder :
<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>
Inscription au middleware :
Inscrivez-vous comme suit MyExceptionHandler
Middleware :
<code class="language-csharp">builder.Services.AddExceptionHandler<MyExceptionHandler>(); app.UseExceptionHandler(_ => { });</code>
Ce middleware interceptera et gérera toutes les exceptions, y compris celles des filtres.
Points clés :
IExceptionHandler
L'implémentation peut enchaîner les appels dans l'ordre d'inscription. TryHandleAsync
de true
si l'exception a été gérée ; sinon, retournez false
pour transmettre l'exception au gestionnaire suivant. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!