Net Core 3 上 Web Api 的版本控制

Versioning for WebApi on NetCore3

我正在迈出 NetCore3 的第一步。我在 VS.NET 2019 年启动了一个默认的 webapi 项目,它创建了一个名为 WeatherForecastController 的控制器。我已经用虚拟信息测试了 webapi 和这个 returns a JSON,到目前为止一切顺利。

现在,我正在尝试以这种方式使用属性 Route 来使用版本控制:

[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
public class WeatherForecastController : ControllerBase

但是我 运行 遇到了这个错误:

InvalidOperationException: 约束引用 'apiVersion' 无法解析为类型。使用 'Microsoft.AspNetCore.Routing.RouteOptions.ConstraintMap'

注册约束类型

根据以下URL:

https://www.koskila.net/how-to-resolve-build-failing-with-net-core-3-and-microsoft-aspnetcore-mvc-versioning/

我已经安装了库的 beta 版本 Microsoft.AspNet.WebApi.Versioning,但我总是遇到同样的错误。也许我遗漏了什么或者我犯了一个愚蠢的错误但我无法识别或解决它。

您是否在启动时配置了版本控制?

我正在使用这个包: Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

这是我的 API

的代码
services.AddApiVersioning(options =>
{
   options.ReportApiVersions = true;
   options.AssumeDefaultVersionWhenUnspecified = true;
   options.DefaultApiVersion = new ApiVersion(1, 0);
});

services.AddVersionedApiExplorer(options =>
{
   options.GroupNameFormat = "'v'V";
   options.SubstituteApiVersionInUrl = true;
});

...和控制器:

[ApiVersion("1.0")]
[Route("api/v{ver:apiVersion}/[controller]")]
public class MyController : ControllerBase
{
   ...
}

Microsoft.AspNet.WebApi.Versioning 依赖于 .NETFramework 4.5,而不是 .Net Core。您需要安装 Microsoft.AspNetCore.Mvc.Versioning -Version 4.0.0-preview8.19405.7,它在程序包管理器控制台中提供对 ASP.NET Core 3.0 的支持,如下所示:

Install-Package Microsoft.AspNetCore.Mvc.Versioning -Version 4.0.0-preview8.19405.7

然后在Startup.cs

中的ConfigureServices中添加services.AddApiVersioning();
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddApiVersioning();
    }

参考:https://github.com/microsoft/aspnet-api-versioning/issues/499#issuecomment-521469545