无法合并 Ocelot 配置文件
Cannot merge Ocelot config files
根据 documentation,我尝试合并我的配置文件,以便它们更具可读性。然而,生成的 ocelot.json 文件并不像预期的那样。我的文件夹结构如下:
Folder structure
下面是这个的文本表示:
.
└── Ocelot route configs
├── ocelot.pokemon.json
├── ocelot.tweet.json
└── ocelot.weather.json
ocelot.pokemon.json 文件如下所示(其他类似):
{
"Routes": [
{
"DownstreamPathTemplate": "/api/v2/pokemon",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "pokeapi.co",
"Port": 443
}
],
"UpstreamPathTemplate": "/api/pokemon",
"UpstreamHttpMethod": [ "GET" ],
"AuthenticationOptions": {
"AuthenticationProviderKey": "MyTestKey",
"AllowedScopes": []
}
},
{
"DownstreamPathTemplate": "/api/v2/pokemon/ditto",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "pokeapi.co",
"Port": 443
}
],
"UpstreamPathTemplate": "/api/pokemon/ditto",
"UpstreamHttpMethod": [ "GET" ]
}
]
}
生成的 ocelot.json 文件如下所示:
{
"Routes": [
],
"DynamicRoutes": [
],
"Aggregates": [
],
"GlobalConfiguration": {
"RequestIdKey": null,
"ServiceDiscoveryProvider": {
"Scheme": null,
"Host": null,
"Port": 0,
"Type": null,
"Token": null,
"ConfigurationKey": null,
"PollingInterval": 0,
"Namespace": null
},
"RateLimitOptions": {
"ClientIdHeader": "ClientId",
"QuotaExceededMessage": null,
"RateLimitCounterPrefix": "ocelot",
"DisableRateLimitHeaders": false,
"HttpStatusCode": 429
},
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 0,
"DurationOfBreak": 0,
"TimeoutValue": 0
},
"BaseUrl": null,
"LoadBalancerOptions": {
"Type": null,
"Key": null,
"Expiry": 0
},
"DownstreamScheme": null,
"HttpHandlerOptions": {
"AllowAutoRedirect": false,
"UseCookieContainer": false,
"UseTracing": false,
"UseProxy": true,
"MaxConnectionsPerServer": 2147483647
},
"DownstreamHttpVersion": null
}
}
如您所见,我定义的路由没有添加。我试着在互联网上寻找这个特定问题,但找不到任何东西。我不知道我做错了什么,将不胜感激。
由于您的不同路由配置文件位于一个文件夹中,您应该确保调用了正确的 AddOcelot 方法重载。在这种情况下,应使用包含路由文件的文件夹名称调用该方法。
例如:
config.AddOcelot("Ocelot route configs", hostingContext.HostingEnvironment)
更新:.NET Core 3+
和 Ocelot 17.0.0
由于方法 AddOcelot
需要一个 IWebHostEnvironment
,而这在 HostBuilderContext
中不可用:
您需要通过WebHostBuilderContext
获取:
我创建了两个不同的目录 Development 和 Production 并使用下面的代码,我能够根据开发环境读取 ocelot 配置以生成将由 ocelot 中间件使用的最终 ocelot.json。
根据 documentation,我尝试合并我的配置文件,以便它们更具可读性。然而,生成的 ocelot.json 文件并不像预期的那样。我的文件夹结构如下:
Folder structure
下面是这个的文本表示:
.
└── Ocelot route configs
├── ocelot.pokemon.json
├── ocelot.tweet.json
└── ocelot.weather.json
ocelot.pokemon.json 文件如下所示(其他类似):
{
"Routes": [
{
"DownstreamPathTemplate": "/api/v2/pokemon",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "pokeapi.co",
"Port": 443
}
],
"UpstreamPathTemplate": "/api/pokemon",
"UpstreamHttpMethod": [ "GET" ],
"AuthenticationOptions": {
"AuthenticationProviderKey": "MyTestKey",
"AllowedScopes": []
}
},
{
"DownstreamPathTemplate": "/api/v2/pokemon/ditto",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
{
"Host": "pokeapi.co",
"Port": 443
}
],
"UpstreamPathTemplate": "/api/pokemon/ditto",
"UpstreamHttpMethod": [ "GET" ]
}
]
}
生成的 ocelot.json 文件如下所示:
{
"Routes": [
],
"DynamicRoutes": [
],
"Aggregates": [
],
"GlobalConfiguration": {
"RequestIdKey": null,
"ServiceDiscoveryProvider": {
"Scheme": null,
"Host": null,
"Port": 0,
"Type": null,
"Token": null,
"ConfigurationKey": null,
"PollingInterval": 0,
"Namespace": null
},
"RateLimitOptions": {
"ClientIdHeader": "ClientId",
"QuotaExceededMessage": null,
"RateLimitCounterPrefix": "ocelot",
"DisableRateLimitHeaders": false,
"HttpStatusCode": 429
},
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking": 0,
"DurationOfBreak": 0,
"TimeoutValue": 0
},
"BaseUrl": null,
"LoadBalancerOptions": {
"Type": null,
"Key": null,
"Expiry": 0
},
"DownstreamScheme": null,
"HttpHandlerOptions": {
"AllowAutoRedirect": false,
"UseCookieContainer": false,
"UseTracing": false,
"UseProxy": true,
"MaxConnectionsPerServer": 2147483647
},
"DownstreamHttpVersion": null
}
}
如您所见,我定义的路由没有添加。我试着在互联网上寻找这个特定问题,但找不到任何东西。我不知道我做错了什么,将不胜感激。
由于您的不同路由配置文件位于一个文件夹中,您应该确保调用了正确的 AddOcelot 方法重载。在这种情况下,应使用包含路由文件的文件夹名称调用该方法。
例如:
config.AddOcelot("Ocelot route configs", hostingContext.HostingEnvironment)
更新:.NET Core 3+
和 Ocelot 17.0.0
由于方法 AddOcelot
需要一个 IWebHostEnvironment
,而这在 HostBuilderContext
中不可用:
您需要通过WebHostBuilderContext
获取:
我创建了两个不同的目录 Development 和 Production 并使用下面的代码,我能够根据开发环境读取 ocelot 配置以生成将由 ocelot 中间件使用的最终 ocelot.json。