Asp.Net webAPI C#でのDelegatingHandlerの使用法は何ですか?
メッセージハンドラーでは、一連のメッセージハンドラーがチェーンされます。最初のハンドラーはHTTPリクエストを受信し、何らかの処理を行って、次のハンドラーにリクエストを渡します。ある時点で、応答が作成され、チェーンに戻ります。このパターンは委任ハンドラーと呼ばれます 。
組み込みのサーバー側メッセージハンドラーに加えて、独自のサーバー側HTTPメッセージハンドラーを作成することもできます。 カスタムのサーバー側HTTPMessageハンドラーを作成するには ASP.NET Web APIでは、 DelegatingHandlerを使用します 。 System.Net.Http.DelegatingHandlerから派生したクラスを作成する必要があります 。そのカスタムクラスは、 SendAsyncをオーバーライドする必要があります メソッド。
タスク
このメソッドは、HttpRequestMessageを入力として受け取り、非同期でanHttpResponseMessageを返します。典型的な実装は次のことを行います-
- リクエストメッセージを処理します。
- base.SendAsyncを呼び出して、リクエストを内部ハンドラーに送信します。
- 内部ハンドラーは応答メッセージを返します。 (このステップは非同期です。)
- 応答を処理して、発信者に返します。
例
public class CustomMessageHandler : DelegatingHandler{ protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken){ Debug.WriteLine("CustomMessageHandler processing the request"); // Calling the inner handler var response = await base.SendAsync(request, cancellationToken); Debug.WriteLine("CustomMessageHandler processing the response"); return response; } }
委任ハンドラーは、内部ハンドラーをスキップして、応答を直接作成することもできます。
例
public class CustomMessageHandler: DelegatingHandler{ protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken){ // Create the response var response = new HttpResponseMessage(HttpStatusCode.OK){ Content = new StringContent("Skipping the inner handler") }; // TaskCompletionSource creates a task that does not contain a delegate var taskCompletion = new TaskCompletionSource<HttpResponseMessage>(); taskCompletion.SetResult(response); return taskCompletion.Task; } }
-
C#ASP.NET WebAPIのさまざまな種類のフィルターは何ですか?
フィルタは、WebApiFrameworkリクエスト処理のさまざまなレベルで追加のロジックを挿入するために使用されます。フィルタは、横断的関心事(ロギング、承認、およびキャッシング)の方法を提供します。フィルタは、宣言的またはプログラム的な方法でアクションメソッドまたはコントローラに適用できます。以下は、Web API C#のフィルターの種類です。 認証フィルター − 認証フィルターは、ユーザーの詳細を認証するのに役立ちます。認証フィルターでは、ユーザーの信頼性をチェックするためのロジックを記述します。 認証フィルター − 承認フィルターは、ユーザーアクセスのチェックを担当しま
-
C#ASP.NET WebAPIでのコントローラーアクションのさまざまな戻り値の種類は何ですか?
Web APIアクションメソッドは、次のリターンタイプを持つことができます。 ボイド プリミティブ型/複合型 HttpResponseMessage IHttpActionResult 無効 − すべてのアクションメソッドが何かを返す必要はありません。ボイドリターンタイプにすることができます。 例 using DemoWebApplication.Models using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoCont