Dalam API Web Teras ASP.NET, pengendalian pengecualian adalah jauh berbeza daripada API Web ASP.NET tradisional. Walaupun penapis pengendalian pengecualian boleh digunakan, ia mempunyai had tertentu.
Dalam contoh yang disediakan, ErrorHandlingFilter
tidak dapat menangkap pengecualian dalam AuthorizationFilter
. Ini kerana penapis dilaksanakan secara berurutan, dan setiap penapis bertanggungjawab untuk mengendalikan pengecualiannya sendiri. Jika pengecualian dilemparkan dalam penapis sebelumnya, ia akan mengganggu pelaksanaan penapis berikutnya.
Untuk mengendalikan pengecualian bagi semua penapis, termasuk pengecualian aplikasi, anda boleh memanfaatkan antara muka IExceptionHandler
. Begini cara melakukannya:
<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>
Pendaftaran perisian tengah:
Daftar seperti berikut MyExceptionHandler
Middleware:
<code class="language-csharp">builder.Services.AddExceptionHandler<MyExceptionHandler>(); app.UseExceptionHandler(_ => { });</code>
Perisian tengah ini akan menangkap dan mengendalikan semua pengecualian, termasuk pengecualian daripada penapis.
Isi penting:
IExceptionHandler
Pelaksanaan boleh membuat panggilan berantai mengikut urutan pendaftaran. TryHandleAsync
daripada true
jika pengecualian dikendalikan jika tidak, kembalikan false
untuk menyerahkan pengecualian kepada pengendali seterusnya. Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Pengecualian daripada Semua Penapis, Termasuk Penapis Kebenaran, dalam API Web Teras ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!