簡體   English   中英

NetCore3 上的 WebApi 版本控制

[英]Versioning for WebApi on NetCore3

我正在 NetCore3 中邁出第一步。 我已經在 VS.NET 2019 中啟動了一個默認的 webapi 項目,它創建了一個名為 WeatherForecastController 的 controller。 我已經測試了 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 庫的測試版,但我一直收到同樣的錯誤。 也許我遺漏了一些東西,或者我犯了一個愚蠢的錯誤,但我無法識別或解決它。

Microsoft.AspNet.WebApi.Versioning依賴於 .NETFramework 4.5,而不是 .Net Core。 您需要在 Package 管理器控制台中安裝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(); 在 Startup.cs 的 ConfigureServices 中

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

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

您是否在啟動時配置了版本控制?

我正在使用這個 package: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;
});

...和 controller:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM