【发布时间】: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