在 ASP.NET Core Web API 中,例外處理與傳統的 ASP.NET Web API 有顯著差異。雖然可以使用異常處理過濾器,但它們有一定的限制。
在提供的範例中,ErrorHandlingFilter
無法捕捉 AuthorizationFilter
中的異常。這是因為過濾器按順序執行,每個過濾器負責處理自己的異常。如果在先前的過濾器中拋出異常,它將中斷後續過濾器的執行。
要處理所有過濾器的異常,包括應用程式異常,您可以利用 IExceptionHandler
介面。以下是實作方法:
<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>
中介軟體註冊:
如下註冊 MyExceptionHandler
中介軟體:
<code class="language-csharp">builder.Services.AddExceptionHandler<MyExceptionHandler>(); app.UseExceptionHandler(_ => { });</code>
此中間件將捕獲並處理所有異常,包括來自過濾器的異常。
關鍵點:
IExceptionHandler
實作可以依照註冊順序進行鍊式呼叫。 TryHandleAsync
傳回 true
;否則,傳回 false
將異常傳遞給下一個處理程序。 以上是如何處理 ASP.NET Core Web API 中所有過濾器(包括授權過濾器)的例外狀況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!