我正在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:
我已经安装了Microsoft.AspNet.WebApi.Versioning库的Beta版,但是我仍然遇到相同的错误。也许我遗漏了一些东西,或者我犯了一个愚蠢的错误,但是我无法识别或解决它。
答案 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;
});