为什么豹猫不更换部分标题?



我使用Ocelot作为api网关,遇到了配置问题。我试图替换来自api的"Location"头值的一部分(当api返回CreatedAtRoute(...)结果时(。请参阅ocelot.json:的一部分

// ...
{
"UpstreamPathTemplate": "/hotels",
"UpstreamHttpMethod": [ "Post", "Put" ],
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "<api_host>",
"Port": 80
}
],
"DownstreamPathTemplate": "/api/hotels",
"DownstreamHeaderTransform": {
"Location": "{DownstreamBaseUrl}/api, {BaseUrl}" // the issue here
}
},
// ...

当发布新对象时,我想要在标题中显示什么(42只是随机数(:

Location: http://<gateway_host>/hotels/42

我实际得到的:

Location: http://<api_host>/api/hotels/42

也许没关系,但这两个应用程序都在docker中运行。

首先,我想强调的是,使用常规流程运行也会发生这种情况,而不仅仅是在docker环境中。

我使用的请求是POST:https://localhost:7051/api/project-manager/examples?exampleName=example1(/api/project-manager是Ocelot添加的前缀(。返回给Ocelot客户端的(坏(位置是https://localhost:2261/examples/example1,与我在没有GW:的情况下直接尝试到web api时得到的位置相同

content-length: 2868 
content-type: application/json; charset=utf-8 
date: Mon,01 Aug 2022 11:27:23 GMT 
location: https://localhost:2261/examples/example1 
server: Kestrel 

虽然我希望得到位置:https://localhost:7051/api/project-manager/examples/example1

缺少在-端口路径转换中:/api/project-manager前缀ocelot被配置为添加。


关于解决方案,我看到了另一个提供解决方案的讨论。因此,本次讨论可能是以下内容的重复:如何在CreatedAtRoute位置标头上添加网关基本路径-URL重写

在我的案例中,它通过将以下DownstreamHeaderTransform添加到配置中而有所帮助:

"UpstreamPathTemplate": "/api/project-manager/{everything}",
"DownstreamHeaderTransform": {
"Location": "{DownstreamBaseUrl}, {BaseUrl}/api/project-manager"
},

它产生了一个正确的(转换的(位置:

access-control-allow-origin: * 
content-length: 2864 
content-type: application/json; charset=utf-8 
date: Tue,02 Aug 2022 07:52:25 GMT 
location: https://localhost:7051/api/project-manager/examples/example1 
server: Kestrel 

相关内容

  • 没有找到相关文章

最新更新