使用WebAPI .Net Core进行版本控制无法按预期工作

时间:2018-10-16 18:14:15

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

我正在尝试将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")]

现在,当我单击我的招摇UI中列出的相同方法时

该网址如下所示:

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

而我所期望的却是这样:

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

现在我也大张旗鼓地问我有关输入版本号的问题。所以我认为我的问题可以归结为两点:

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

2 个答案:

答案 0 :(得分:1)

用招摇过头设置api版本确实是一件棘手的事情,因为其中很多部分需要正确设置。

幸运的是,有一个很棒的nuget软件包,叫做 SwashbuckleAspNetVersioningShim ,可以很好地解决这个问题。

添加

Install-Package SwashbuckleAspNetVersioningShim -Version 2.2.1

然后按照自述文件here

答案 1 :(得分:1)

您缺少的是支持API版本感知API Explorer的API版本补充软件包:

JavaFX WebView can't load certain sites

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://www.nuget.org/packages/Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

可接受的答案扩展了此程序包,只要它与您正在使用的API版本保持一致,就可以了。 API版本控制始终在每个发行版中都提供兼容的API Explorer扩展。