【问题标题】:AspnetCore 3.1 API giving UnsupportedApiVersionAspnetCore 3.1 API 提供 UnsupportedApiVersion
【发布时间】:2021-10-26 01:53:42
【问题描述】:

我已经建立了一个我认为很好的结构来创建 API 的多个版本。我决定通过 URI sigment 严格支持版本控制(即:/api/v1/records)。我还在为 API 版本生成 swagger 文档。文档生成似乎工作正常,但由于某种原因,我只能到达我的 v1 端点。当我尝试访问这些时,一切正常,但是当我尝试访问 v2 端点时,我得到了:

"Error": {
    "Code": "UnsupportedApiVersion",
    "Message": "The HTTP resource that matches the request URI 'https://localhost:5001/api/v2/records' is not supported.",
    "InnerError": null
}

我在this repo 中创建了该问题的简单复现。如果您导航到 /swagger 页面并尝试 v1 或 v2,您将看到 v1 有效,但 v2 无效。我在这里错过了什么?

更新

好的,我在追踪问题方面取得了一些进展。如果我在 ApdApiExtensions.cs 中注释掉以下行: options.ApiVersionReader = new UrlSegmentApiVersionReader(); 然后,只要路由中的 URI 版本段和 api-version 查询参数集匹配,这两个版本的 API 都可以工作并调用适当的控制器操作,例如: https://localhost:5001/api/v2/records?api-version=2

显然这是多余的,因此我添加了上面的代码行以使 API 仅使用 URI 段版本控制,因此我可以放弃查询参数。出于某种原因,尽管这会破坏事物并导致仅 API 的 v1 端点工作。

【问题讨论】:

  • 由于特殊原因我不能使用你的代码,但是我也注释了“options.ApiVersionReader = new UrlSegmentApiVersionReader();”,然后添加了[ApiVersion("1.0")]和[ApiVersion("2.0 ") 到控制器],配置 [Route("api/v{version:apiVersion}/[controller]")] 这样我就不需要在最后添加版本。这适用于网址。

标签: asp.net-core swagger asp.net-core-webapi


【解决方案1】:

感谢超登为我指明了正确的方向。答案是我必须将它添加到我的控制器中:

[Route("api/v{version:apiVersion}")]

不过,我不需要注释掉 UrlSegmentApiVersionReader。当然,在将它添加到控制器之后,我必须更新 ApiRoutes.cs 中的路由以删除 api/v# 部分,这样它就不会被重复,但这样做似乎可以解决它。

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多