Управление версиями для WebApi на NetCore3 - PullRequest
0 голосов
/ 24 октября 2019

Я делаю первые шаги в NetCore3. Я запустил проект webapi по умолчанию в VS.NET 2019, он создал контроллер с именем 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, но я продолжаю получать ту же ошибку. Может быть, я что-то опускаю или у меня глупая ошибка, но я не могу ее идентифицировать или решить.

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

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

Затем добавьте services.AddApiVersioning(); в ConfigureServices в Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddApiVersioning();
    }

Ссылка: https://github.com/microsoft/aspnet-api-versioning/issues/499#issuecomment-521469545

0 голосов
/ 24 октября 2019

Вы настроили управление версиями при запуске?

Я использую этот пакет: 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
{
   ...
}
...