Asp.Net webAPI C#中的DelegatingHandler的用法是什么?

在消息处理程序中,一系列消息处理程序链接在一起。第一个处理程序接收一个HTTP请求,进行一些处理,然后将该请求提供给下一个处理程序。在某个时候,将创建响应并将其返回链中。此模式称为委托处理程序。

除了内置的服务器端消息处理程序外,我们还可以创建自己的服务器端HTTP消息处理程序。为了在ASP.NET Web API中创建自定义的服务器端HTTP消息处理程序,我们使用DelegatingHandler。我们必须创建一个派生自System.Net.Http.DelegatingHandler的类。然后,该自定义类应重写SendAsync方法。

Task <HttpResponseMessage> SendAsync(HttpRequestMessage请求,CancellationToken cancelToken);

该方法以HttpRequestMessage作为输入,并异步返回HttpResponseMessage。一个典型的实现执行以下操作-

  • 处理请求消息。

  • 调用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;

   }

}

以上是 Asp.Net webAPI C#中的DelegatingHandler的用法是什么? 的全部内容, 来源链接: utcz.com/z/327256.html

回到顶部