NetCore3上的WebApi版本控制

时间:2019-10-24 19:10:22

标签: c# .net-core-3.0 asp.net-core-3.0

我正在NetCore3中迈出第一步。我已经在VS.NET 2019中启动了一个默认的webapi项目,这创建了一个名为WeatherForecastController的控制器。我已经测试了webapi,到目前为止返回的是带有伪信息的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/

我已经安装了Microsoft.AspNet.WebApi.Versioning库的Beta版,但是我仍然遇到相同的错误。也许我遗漏了一些东西,或者我犯了一个愚蠢的错误,但是我无法识别或解决它。

2 个答案:

答案 0 :(得分:3)

Microsoft.AspNet.WebApi.Versioning依赖于.NETFramework 4.5,而不是.Net Core。您需要安装Microsoft.AspNetCore.Mvc.Versioning -Version 4.0.0-preview8.19405.7,该软件包在Package Manager控制台中提供对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

答案 1 :(得分:0)

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

我正在使用此软件包: Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer

这是它对我的API起作用的代码

break-inside: avoid;

...和控制器:

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;
});