【发布时间】:2021-07-03 02:00:42
【问题描述】:
任何人都可以建议在 ocelot(处理程序或类似的)中注入代码以获取请求的正确位置,查看它,如果有带有版本规范的标头“Accept”,请将其添加到路径中。 对于标头值 application/vnd.myapp.v2+json ,它将表明我们要调用 API v2 并相应地调整请求。 此逻辑需要在应用路由规则之前执行,因为下游路由将在路径中有版本:
调用 GET /teams/(带有接受标头 application/vnd.myapp.v2+json)变为 调用 GET /v2/teams/ 将使用重定向规则发送到处理团队调用 V2 的服务。
示例逻辑(需要调整以在开始时添加版本)
private static Microsoft.AspNetCore.Http.PathString AppendVersionInPath(DownstreamContext ctx)
{
if (ctx.HttpContext.Request.Headers.TryGetValue("accept", out var acceptHeaderValue))
{
var resultString = Regex.Match(acceptHeaderValue, @"\d+").Value;
if (resultString.Length > 0)
{
var versionPath = $"/v{resultString}";
ctx.HttpContext.Request.Path = ctx.HttpContext.Request.Path.Add(new Microsoft.AspNetCore.Http.PathString(versionPath));
}
}
return ctx.HttpContext.Request.Path;
}
【问题讨论】:
标签: ocelot