当前位置: 首页 > 编程笔记 >

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

袁骏祥
2023-03-14
本文向大家介绍Asp.Net webAPI C#中的DelegatingHandler的用法是什么?,包括了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;
   }
}
 类似资料:
  • 问题内容: 我一直在阅读一些源代码,并且在几个地方看到了的用法。 到底是什么意思?它的用途是什么? 问题答案: 该语句几乎存在于每种编程语言中。它有助于在程序中尽早发现问题,找出原因,而不是在其他操作后再发现问题。 当你做… …您正在告诉程序测试该条件,如果条件为假,则立即触发错误。 在Python中,它大致等同于此: 在Python Shell中尝试: 断言可以包含可选消息,并且您可以在运行解释

  • 本文向大家介绍DB2中SEQUENCE的用法和语法是什么?,包括了DB2中SEQUENCE的用法和语法是什么?的使用技巧和注意事项,需要的朋友参考一下 序列用于自动生成唯一ID。我们可以将DB2表中的列定义为SEQUENCE类型。这将使DB2能够为表中插入的每个新行自动生成唯一的ID。DB2生成的自动ID在整个数据库中保持唯一。 例如,SEQUENCE的实际实现是在为北,东,西和南每个区域分配了单

  • 本文向大家介绍React中getInitialState方法的作用是什么?相关面试题,主要包含被问及React中getInitialState方法的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 使用es5创建组件caerteClass getInitialState(初始化state)

  • 问题内容: 问题答案: 内容类型包含在HTTP响应中,因为可以用多种方式解释内容中相同的字节对字节的值序列。 请记住,http不仅可以传输HTML(js,css和图像是显而易见的示例),而且在某些情况下,接收方将不知道它将接收什么类型的对象。 (*)这里最明显的是XHTML-XML。如果提供的内容类型为,则接收方 应将 其视为XML。如果用作,则应将其视为XHTML。

  • 本文向大家介绍JavaScript中Object.isFrozen()方法的用途是什么?,包括了JavaScript中Object.isFrozen()方法的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 Object.isFrozen() Object.isFrozen()方法用于查找对象是否冻结。  如果符合以下条件,则对象被冻结 它不应是可扩展的。 它的属性应该是 不可配置的。 它不应

  • 本文向大家介绍JavaScript中Atomics.store()方法的用途是什么?,包括了JavaScript中Atomics.store()方法的用途是什么?的使用技巧和注意事项,需要的朋友参考一下 Atomics.store() Atomics.store()是一种内置方法,用于将特定值存储在数组中的特定位置。此方法接受Integer类型的数组,索引和值作为参数。 语法 参数 typedAr