【问题标题】:Azure API Management - Versioning path schema duplicates version in urlAzure API 管理 - 版本控制路径架构在 url 中重复版本
【发布时间】:2020-11-25 12:35:17
【问题描述】:

我正在尝试应用 api 管理 版本集 来查询具有两个版本的 .Netcore 3.1 Web api。我在版本集上选择了路径模式,它将版本标识符附加到 url。在这种情况下 /v1:

问题是,在我的 api 中,我还使用路径模式对 web api 上的端点进行版本控制,所以当 apim 构建 url 时,它会将 apim 版本标识符附加到 api 版本路径,这会导致重复,喜欢:

https://myapi.com/apiname/v1/v1/endpoint ,其中 v1/endopoint 是控制器的路径。

为了解决这个问题,我已将 web api 上的版本模式切换为标头,并在 apim 上创建了一个策略,将版本标头添加到请求中,因此路径中的唯一版本现在是 apim 中的版本。

我想知道这是否是正确的方法,或者是否有更好的解决方案。也许可以告诉 apim 忽略路径中的版本 /v1?

感谢您的帮助!

【问题讨论】:

    标签: asp.net-core-webapi azure-api-management api-versioning


    【解决方案1】:

    APIM 域模型允许在 API 版本集级别控制版本控制方案(路径前缀、标头名称/值、查询参数名称/值),因此您不需要需要在 API 的每个操作中复制 /v1.0。从本质上讲,如果您的 API 版本集配置为具有 /v1.0 的路径前缀,它将被附加到包含在此版本集中的所有 API 路径中。这就是导致翻倍的原因。

    【讨论】:

    • 虽然我很欣赏这个解释,但我不明白你想说什么。你的意思是我不必在我的api中设置路径版本路由?
    • 您可以查看这篇博客文章,其中描述了这种方法。 hakantuncer.com/2018/09/16/…
    • 现在有更新吗?如果对你有帮助,请采纳为答案。
    • 嗨乔伊。感谢您的帮助,但不幸的是,它没有帮助。可能是因为问题与 swashbuckle 生成开放 api 路由的方式有关。版本路径被添加到 openapi 路由规范中,并且 apim 将其导入版本集,这意味着它将包含来自 apim 中的版本集的 /v1/ 路径,以及来自开放 api 路由的 /v1/ 路径。在 swagger gen 配置中应该有一个选项可以省略这个版本路径,但我找不到它。
    • @RuiVaz 据我所知,这实际上可行。如果您查看相关的 PowerShell 脚本,它会使用一些正则表达式和其他操作来修复路径。这更像是 APIM 将其意志强加给您的问题,而不是其他任何事情。另一种选择是使用 API Explore 和可选的 Swashbuckle CLI 以不同的方式生成文档。注入一个会删除 APIM 的第一段的进程非常容易
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-12-21
    • 2016-08-13
    • 2018-12-17
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多