Ocelot中文文档-委托处理程序(转)
原文地址:https://www.cnblogs.com/snaildev/articles/9151763.html
Ocelot允许用户将委托处理程序添加到HttpClient传输中。 这个功能在github #208中提出,我确定它会以各种方式被使用。之后我们在GitHub#264中进行了扩展。
用法
为了将委托处理程序添加到HttpClient传输中,有两件重要的事情要做。
首先,为了创建一个可以用于委托处理程序的类,它必须如下所示。 我们将在asp.net core容器中注册这些处理程序,以便您可以将您已注册的其他服务注入到处理程序的构造函数中。
1
2
3
4
5
6
7
8
|
public class FakeHandler : DelegatingHandler { protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { //do stuff and optionally call the base handler.. return await base .SendAsync(request, cancellationToken); } } |
Next you must add the handlers to Ocelot’s container either as singleton like follows..
其次,您必须将处理程序添加到Ocelot的容器,要么作为单例注册。
1
2
3
|
services.AddOcelot() .AddSingletonDelegatingHandler<FakeHandler>() .AddSingletonDelegatingHandler<FakeHandlerTwo>() |
要么注册为临时的...
1
2
3
|
services.AddOcelot() .AddTransientDelegatingHandler<FakeHandler>() .AddTransientDelegatingHandler<FakeHandlerTwo>() |
这两个Add方法都有一个名为global的参数,它默认为false。 如果它是false,那么DelegatingHandler需要通过ocelot.json设置特定的ReRoutes(稍后更多)。 如果设置为true,则它将成为全局处理程序,并将应用于所有ReRoutes。
例如:
1
2
|
services.AddOcelot() .AddSingletonDelegatingHandler<FakeHandler>( true ) |
或者临时注册
1
2
|
services.AddOcelot() .AddTransientDelegatingHandler<FakeHandler>( true ) |
最后,如果你想要ReRoute指定DelegatingHandlers为你的特定DelegatingHandlers,或全局(稍后会详细介绍)DelegatingHandlers,那么你必须将下面的json添加到ocelot.json中的特定ReRoute中。 数组中的名称必须与您的DelegatingHandlers类名匹配,以便Ocelot将它们匹配在一起。
1
2
3
4
|
"DelegatingHandlers" : [ "FakeHandlerTwo" , "FakeHandler" ] |
你可以有多个DelegatingHandlers,他们的运行顺序如下:
- 所有在服务中并且不在ocelot.json的DelegatingHandlers数组中的全局处理程序按加入的顺序排序。
- 所有非全局的DelegatingHandlers以及来自ocelot.json的DelegatingHandlers数组中的所有全局变量都按照它们在DelegatingHandlers数组中的顺序排列。
- 如果启用了跟踪,那么这一步是跟踪DelegatingHandler(看跟踪文档).
- 如果启用了QoS,那么这一步是QoS DelegatingHandler (看服务质文档).
- HttpClient发生HttpRequestMessage.
希望其他人会洞悉这个功能是很有用的!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器