【问题标题】:Versioning with WebAPI .Net Core does not work as expected使用 WebAPI .Net Core 进行版本控制无法按预期工作
【发布时间】:2019-03-21 08:25:31
【问题描述】:

我正在尝试将 URL 版本控制引入我的 .Net Core WebAPI 应用程序。我还在使用 Swagger 网络工具以方便用户使用。

现在,在尝试将版本控制引入我的应用程序时,我在此处引用了文档: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")]

现在当我点击我的招摇用户界面中列出的相同方法时

网址如下所示:

http://localhost:12003/swagger/#!/controllername/ApiV_versionGetAll

虽然我期待的是这样的:

http://localhost:12003/swagger/#!/controllername/V1.0/GetAll

同样在我大摇大摆的情况下,它现在明确要求我输入版本号。所以我认为我的问题归结为两点:

  • 如何修复我的 URL?我做错了什么?
  • 当我在控制器的注释中明确声明版本将是 1.0 时,为什么 swagger 现在要求我在 API UI 中输入版本号?

【问题讨论】:

标签: asp.net-core swagger asp.net-core-webapi restful-url api-versioning


【解决方案1】:

您缺少的是支持 API 版本感知 API Explorer 的 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 );

注意:在 API Versioning 3.0+ 中不再需要调用 AddMvcCore()

官方 API 版本控制库中提供了文档和示例。我建议查看 API 文档 wiki 主题:

https://github.com/Microsoft/aspnet-api-versioning/wiki/API-Documentation

接受的答案扩展了这个包,只要它与您正在使用的 API 版本控制风格保持同步就可以了。 API 版本控制始终在每个版本中提供兼容的 API Explorer 扩展。

【讨论】:

    【解决方案2】:

    使用 swagger 设置 api 版本控制确实是一件棘手的事情,因为它需要正确设置很多部分。

    幸运的是,有一个很棒的 nuget 包,名为 SwashbuckleAspNetVersioningShim,它以极好的方式解决了这个问题。

    添加它

    Install-Package SwashbuckleAspNetVersioningShim -Version 2.2.1
    

    然后按照自述文件here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2018-05-03
      • 1970-01-01
      • 2017-08-16
      相关资源
      最近更新 更多