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 中国語 Web サイトの他の関連記事を参照してください。