首頁 >後端開發 >C++ >如何處理 ASP.NET Core Web API 中所有過濾器(包括授權過濾器)的例外狀況?

如何處理 ASP.NET Core Web API 中所有過濾器(包括授權過濾器)的例外狀況?

DDD
DDD原創
2025-01-18 20:46:16461瀏覽

How Can I Handle Exceptions from All Filters, Including Authorization Filters, in ASP.NET Core Web APIs?

ASP.NET Core Web API 例外處理:瞭解過濾器的限制

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn