Ocelot中文文档-转换Headers(转)
原文地址:https://www.cnblogs.com/snaildev/articles/9151743.html
Ocelot允许在请求下游服务之前和之后转换头部.目前Ocelot只支持查找和替换.这个功能在Github #190提出.我确定这个功能可以在各个方面发挥作用。
添加到请求
这个功能在GitHub #313被提出。
如果你想在你的上游请求中添加一个头,请在ocelot.json文件的ReRoute中添加如下配置:
1
2
3
|
"UpstreamHeaderTransform" : { "Uncle" : "Bob" } |
上面例子中,一个键为Uncle,值为Bob的头将被添加到上游服务中。
也支持占位符(看下面)。
添加到相应
这个功能在GitHub #280被提出。
如果你想在你的下游响应中添加一个头,请在ocelot.json文件的ReRoute中添加如下配置:
1
2
3
|
"DownstreamHeaderTransform" : { "Uncle" : "Bob" }, |
上面例子中,当请求一个特定ReRoute的时候,Ocelot将返回一个键为Uncle,值为Bob的头。
如果你想返回Butterfly 跟踪id,需要像下面这样...
1
2
3
|
"DownstreamHeaderTransform" : { "AnyKey" : "{TraceId}" }, |
查找并替换
为了变换头,首先我们指定头的键,然后指定我们想要的变换内容,例如
1
|
"Test" : "http://www.bbc.co.uk/, http://ocelot.com/" |
上面键是"Test",值是“http://www.bbc.co.uk/,http://ocelot.com/”,这个值的意思是使用http://ocelot.com/替换http://www.bbc.co.uk/,语法是{find},{replace}。希望还算简单明了,更多解释在下面例子中。
下游请求之前
在ocelot.json的ReRoute中添加如下配置 ,以便用http://ocelot.com/替换http://www.bbc.co.uk/ .Test头将被替换并发送到下游服务.
1
2
3
|
"UpstreamHeaderTransform" : { "Test" : "http://www.bbc.co.uk/, http://ocelot.com/" }, |
下游请求之后
在ocelot.json的ReRoute中添加如下配置 ,以便用http://ocelot.com/替换http://www.bbc.co.uk/ . 当Ocelot收到下游服务响应之后将进行替换.
1
2
3
|
"DownstreamHeaderTransform" : { "Test" : "http://www.bbc.co.uk/, http://ocelot.com/" }, |
占位符
Ocelot允许在头不转换中使用占位符.
{BaseUrl} - 这个是Ocelot的基本url. 例如http://localhost:5000/. {DownstreamBaseUrl} - 这个是下游服务的基本url 例如http://localhost:5001/. 目前这个只在DownstreamHeaderTransform中起作用. {TraceId} - 这个是Butterfly的跟踪id.目前这个也只在DownstreamHeaderTransform中起作用.
处理 302 重定向
Ocelot默认会自动遵循重定向,但是如果您想将location头返回给客户端,您可能需要将location更改为Ocelot而不是下游服务。 Ocelot可以使用以下配置实现。
1
2
3
4
5
6
|
"DownstreamHeaderTransform" : { "Location" : "http://www.bbc.co.uk/, http://ocelot.com/" }, "HttpHandlerOptions" : { "AllowAutoRedirect" : false , }, |
你也可以使用BaseUrl占位符.
1
2
3
4
5
6
|
"DownstreamHeaderTransform" : { "Location" : "http://localhost:6773, {BaseUrl}" }, "HttpHandlerOptions" : { "AllowAutoRedirect" : false , }, |
最后,如果你使用负载均衡的话,你将得到多个下游基地址,所以像上面那样是不能正常工作的.在这种情况下你可以如下配置.
1
2
3
4
5
6
|
"DownstreamHeaderTransform" : { "Location" : "{DownstreamBaseUrl}, {BaseUrl}" }, "HttpHandlerOptions" : { "AllowAutoRedirect" : false , }, |
未来
理想情况下,这个特性能够支持实际上头部可以有多个值的情况。目前只是假设一个。 如果它可以查找和替换多个值应该是非常棒的。
1
2
3
4
5
6
|
"DownstreamHeaderTransform" : { "Location" : "[{one,one},{two,two}" }, "HttpHandlerOptions" : { "AllowAutoRedirect" : false , }, |
如果有人想在这一展身手,请自己搞定吧!
【推荐】国内首个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虚拟网络编辑器