使用 WebAPI .Net Core 进行版本控制无法按预期工作
Versioning with WebAPI .Net Core does not work as expected
我正在尝试将 URL 版本控制引入我的 .Net Core WebAPI 应用程序。我还使用 Swagger Web 工具来方便用户使用。
现在,在尝试将版本控制引入我的应用程序时,我参考了此处的文档:https://github.com/Microsoft/aspnet-api-versioning/wiki/New-Services-Quick-Start#aspnet-core
现在,我对我的代码进行了以下代码更改:
Startup.cs/ConfigureServices 我在下面添加了代码:
services.AddApiVersioning(options => {
options.AssumeDefaultVersionWhenUnspecified = true;
});
现在,在添加任何类型的版本控制之前,我的控制器注释如下所示:
[Produces("application/json")]
[Route("api/controllerName")]
并生成如下所示的 URL:
http://localhost:12003/swagger/#!/Workspace/GetAll
现在,我在下面添加注释以启用 api 版本控制:
. [ApiVersion("1.0")]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/workspace")]
现在当我点击 swagger 中列出的相同方法时 UI
url 如下所示:
http://localhost:12003/swagger/#!/controllername/ApiV_versionGetAll
虽然我期待的是这样的:
http://localhost:12003/swagger/#!/controllername/V1.0/GetAll
我还大摇大摆地要求我明确输入版本号。所以我想我的问题归结为两个要点:
- 如何修复我的 URL?我做错了什么?
- 为什么 swagger 现在要求我在 API UI 中输入版本号,而我已经在控制器的注释中明确声明版本将为 1.0?
使用 swagger 设置 api 版本控制确实是一件棘手的事情,因为有很多部分需要正确设置。
对我们来说幸运的是,有一个名为 SwashbuckleAspNetVersioningShim 的很棒的 nuget 包,它以出色的方式解决了这个问题。
添加它
Install-Package SwashbuckleAspNetVersioningShim -Version 2.2.1
然后按照自述文件here
您缺少的是 API 版本控制的补充包,它支持 API 版本感知 API 资源管理器:
https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
API Explorer 是像 Swashbuckle 这样的 Swagger 生成器完成所有工作的方式。 API 版本控制库中也提供了源代码和链接。
为了达到你想要的结果,你需要在URL中配置API版本替换:
services.AddMvcCore().AddVersionedApiExplorer( options => options.SubstituteApiVersionInUrl = true );
Note: that the call the AddMvcCore()
is no longer required in API Versioning 3.0+
官方 API 版本控制库中提供了文档和示例。我建议查看 API 文档 wiki 主题:
https://github.com/Microsoft/aspnet-api-versioning/wiki/API-Documentation
接受的答案扩展了这个包,只要它与您正在使用的 API 版本控制的风格保持同步就可以了。 API 版本控制始终在每个版本中提供兼容的 API Explorer 扩展。
我正在尝试将 URL 版本控制引入我的 .Net Core WebAPI 应用程序。我还使用 Swagger Web 工具来方便用户使用。
现在,在尝试将版本控制引入我的应用程序时,我参考了此处的文档:https://github.com/Microsoft/aspnet-api-versioning/wiki/New-Services-Quick-Start#aspnet-core
现在,我对我的代码进行了以下代码更改:
Startup.cs/ConfigureServices 我在下面添加了代码:
services.AddApiVersioning(options => {
options.AssumeDefaultVersionWhenUnspecified = true;
});
现在,在添加任何类型的版本控制之前,我的控制器注释如下所示:
[Produces("application/json")]
[Route("api/controllerName")]
并生成如下所示的 URL:
http://localhost:12003/swagger/#!/Workspace/GetAll
现在,我在下面添加注释以启用 api 版本控制:
. [ApiVersion("1.0")]
[Produces("application/json")]
[Route("api/v{version:apiVersion}/workspace")]
现在当我点击 swagger 中列出的相同方法时 UI
url 如下所示:
http://localhost:12003/swagger/#!/controllername/ApiV_versionGetAll
虽然我期待的是这样的:
http://localhost:12003/swagger/#!/controllername/V1.0/GetAll
我还大摇大摆地要求我明确输入版本号。所以我想我的问题归结为两个要点:
- 如何修复我的 URL?我做错了什么?
- 为什么 swagger 现在要求我在 API UI 中输入版本号,而我已经在控制器的注释中明确声明版本将为 1.0?
使用 swagger 设置 api 版本控制确实是一件棘手的事情,因为有很多部分需要正确设置。
对我们来说幸运的是,有一个名为 SwashbuckleAspNetVersioningShim 的很棒的 nuget 包,它以出色的方式解决了这个问题。
添加它
Install-Package SwashbuckleAspNetVersioningShim -Version 2.2.1
然后按照自述文件here
您缺少的是 API 版本控制的补充包,它支持 API 版本感知 API 资源管理器:
https://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
Install-Package Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer
API Explorer 是像 Swashbuckle 这样的 Swagger 生成器完成所有工作的方式。 API 版本控制库中也提供了源代码和链接。
为了达到你想要的结果,你需要在URL中配置API版本替换:
services.AddMvcCore().AddVersionedApiExplorer( options => options.SubstituteApiVersionInUrl = true );
Note: that the call the
AddMvcCore()
is no longer required in API Versioning 3.0+
官方 API 版本控制库中提供了文档和示例。我建议查看 API 文档 wiki 主题:
https://github.com/Microsoft/aspnet-api-versioning/wiki/API-Documentation
接受的答案扩展了这个包,只要它与您正在使用的 API 版本控制的风格保持同步就可以了。 API 版本控制始终在每个版本中提供兼容的 API Explorer 扩展。