【问题标题】:Use Accept header to remap request URL (api versioning using accept header)使用 Accept 标头重新映射请求 URL(使用接受标头的 api 版本控制)
【发布时间】: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


    【解决方案1】:

    经过一些考虑,我们最终使用了 .net rewrite functionality,实现了接受请求并根据标头值(如果存在)重写 URL 路径的管道处理程序

    我不认为这是最好的答案,但几乎可以肯定 ocelot 不允许这种转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2018-11-13
      • 2021-05-12
      相关资源
      最近更新 更多