C#
 Computer >> コンピューター >  >> プログラミング >> C#

Asp.Net webAPI C#のパイプラインにカスタムメッセージハンドラーを追加するにはどうすればよいですか?


ASP.NET Web APIでカスタムのサーバー側HTTPメッセージハンドラーを作成するには、 System.Net.Http.DelegatingHandlerから派生する必要があるクラスを作成する必要があります。 。

ステップ1-

コントローラとそれに対応するアクションメソッドを作成します。

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   public class StudentController : ApiController{
      List<Student> students = new List<Student>{
         new Student{
            Id = 1,
            Name = "Mark"
         },
         new Student{
            Id = 2,
            Name = "John"
         }
      };
      public IEnumerable<Student> Get(){
         return students;
      }
      public Student Get(int id){
         var studentForId = students.FirstOrDefault(x => x.Id == id);
         return studentForId;
      }
   }
}

ステップ2-

独自のCutomerMessageHandlerクラスを作成します。

using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace DemoWebApplication{
   public class CustomMessageHandler : DelegatingHandler{
      protected async override Task<HttpResponseMessage>
      SendAsync(HttpRequestMessage request, CancellationToken cancellationToken){
         var response = new HttpResponseMessage(HttpStatusCode.OK){
            Content = new StringContent("Result through custom message handler..")
         };
         var taskCompletionSource = new
         TaskCompletionSource<HttpResponseMessage>();
         taskCompletionSource.SetResult(response);
         return await taskCompletionSource.Task;
      }
   }
}

DelegatingHandlerから派生したCustomMessageHandlerクラスを宣言し、その中でSendAsync()関数をオーバーライドしました。

HTTPリクエストが到着すると、CustomMessageHandlerが実行され、HTTPリクエストをさらに処理することなく、独自に1つのHTTPメッセージを返します。魂を込めて、すべてのHTTPリクエストが上位レベルに到達するのを防いでいます。

ステップ3-

次に、CustomMessageHandlerをGlobal.asaxクラスに登録します。

public class WebApiApplication : System.Web.HttpApplication{
   protected void Application_Start(){
      GlobalConfiguration.Configure(WebApiConfig.Register);
      GlobalConfiguration.Configuration.MessageHandlers.Add(new
      CustomMessageHandler());
   }
}

ステップ4−

アプリケーションを実行し、URLを提供します。

Asp.Net webAPI C#のパイプラインにカスタムメッセージハンドラーを追加するにはどうすればよいですか?

上記の出力から、CustomMessageHandlerクラスに設定したメッセージを確認できます。したがって、HTTPメッセージはGet()アクションに到達せず、その前にCustomMessageHandlerクラスに戻ります。


  1. C#ASP.NET WebAPIのさまざまな種類のフィルターは何ですか?

    フィルタは、WebApiFrameworkリク​​エスト処理のさまざまなレベルで追加のロジックを挿入するために使用されます。フィルタは、横断的関心事(ロギング、承認、およびキャッシング)の方法を提供します。フィルタは、宣言的またはプログラム的な方法でアクションメソッドまたはコントローラに適用できます。以下は、Web API C#のフィルターの種類です。 認証フィルター − 認証フィルターは、ユーザーの詳細を認証するのに役立ちます。認証フィルターでは、ユーザーの信頼性をチェックするためのロジックを記述します。 認証フィルター − 承認フィルターは、ユーザーアクセスのチェックを担当しま

  2. C#ASP.NET WebAPIのアクションメソッドからカスタム結果タイプを返す方法は?

    IHttpActionResultインターフェイスを実装することで、結果タイプとして独自のカスタムクラスを作成できます。 。 IHttpActionResultには、HttpResponseMessageインスタンスを非同期的に作成する単一のメソッドExecuteAsyncが含まれています。 public interface IHttpActionResult {    Task<HttpResponseMessage> ExecuteAsync(CancellationToken    cancellationToken); } コントロ