ASP.NET Core3.x API版本控制的实现
一样平常来说必要变动我们API的时辰才思量版本节制,可是我认为我们不该该比及当时辰来实现它,我们应该有一个版本计策从我们应用措施开拓时就开始拟定好我们的计策,我们一向遵循着这个计策举办开拓。 我们着实可以通过多种方法举办实现我们API版本的节制,着实对付版本节制没有最好的方法,这完全取决于我们面向的行使者。 API版本节制范例 安装版本节制包 Install-Package Microsoft.AspNetCore.Mvc.Versioning 在Startup.cs中的ConfigureServices要领中举办版本配置,以及在节制器通过特征举办配置版本,这样可以实现版本节制。 services.AddApiVersioning(options => { options.DefaultApiVersion = new ApiVersion(1, 0); options.AssumeDefaultVersionWhenUnspecified = true; options.ReportApiVersions = true; }); options.DefaultApiVersion = new ApiVersion(1,0): 这个配置不是必需的,由于默认环境下给我们配置的是1.0,可是显式的声明出来是一个很好的风俗,虽然DefaultApiVersion它会将默认的[ApiVersion("1.0")]添加到节制器上,也就是说它会隐式的绑定API版本,可是为了我们利便领略可能说利便我们后头开拓提议显式的配置。 options.AssumeDefaultVersionWhenUnspecified = true:默认API版本节制必要将其属性配置为true才可以开启 options.ReportApiVersions = true:默认环境下它是禁用的,启用此选项后,来自我们API端点的相应将带有标头,汇报我们的客户端支持或不保举行使哪个版本(api-supported-versions:1.1,2.0, api-deprecated-versions:1.0) 默认提供了四种版本节制要领: 字符串参数 通过HTTP哀求头 URL方法 媒体范例(Media Type) 默认要领是行使名为api-version 的查询字符串参数。我们还可以本身界说一个版本节制法则。 API版本束缚方法 字符串参数情势 services.AddApiVersioning(options => options.ApiVersionReader = new QueryStringApiVersionReader("v")); HTTP哀求头 services.AddApiVersioning(options => options.ApiVersionReader = new HeaderApiVersionReader("api-version")); 组合方法 services.AddApiVersioning(options => { options.ApiVersionReader = ApiVersionReader.Combine( new QueryStringApiVersionReader("v"), new HeaderApiVersionReader("v"));}); URL方法 services.AddApiVersioning(options => options.ApiVersionReader = new UrlSegmentApiVersionReader()); 我们可以变动代表版本的参数名称(譬喻,在上面的查询字符串要领中,我们行使字母v取代默认的api-version)。 节制器和要领中添加版本信息 选择版本节制计策并在ConfigureServices要领中对其设置后,我们可以开始对API端点举办版本节制,我们可以将这些属性应用于节制器和要领。 节制器的默承认能没有任何API版本属性,并隐式设置的默认API版本。默认设置行使值1.0。 行使[ApiVersion("1.0")]属性注释我们的节制器,意味着该节制器支持API版本1.0 节制器可以支持多个API版本。只需[ApiVersion(...)]在节制器上应用多个属性 为了区分节制器支持的多个版本,我们行使[MapToApiVersion()]属性注释节制器要领。 假如要行使URL路径则可以参考如下代码片断: [Route("api/v{version:apiVersion}/[controller]")] API节制器弃用,我们只必要配置 [ApiVersion("1.0", Deprecated = true)] 可通过如下要领方法获取全部API版本信息 var apiVersion = HttpContext.GetRequestedApiVersion(); 虽然他还支持模子绑定,我们还可以通过模子情势获取 [HttpGet] public string Get(ApiVersion apiVersion) => $"Controller = {GetType().Name}nVersion = {apiVersion}"; } API版本束缚 我们除了在要领和节制器上指定我们的版本,我们还可以回收另一种方法 services.AddApiVersioning( options => { options.Conventions.Controller<HomeController>().HasApiVersion(1, 0); }); 看如上代码我们可以看到我们在这里给HomeController设置版本,这样利便我们齐集打点我们的版本。 services.AddApiVersioning( options => { options.Conventions.Controller<MyController>() .HasDeprecatedApiVersion(1, 0) .HasApiVersion(1, 1) .HasApiVersion(2, 0) .Action(c => c.Get1_0()).MapToApiVersion(1, 0) .Action(c => c.Get1_1()).MapToApiVersion(1, 1) .Action(c => c.Get2_0()).MapToApiVersion(2, 0); }); 可以同时行使API版本束缚和版本节制属性。 虽然我们还可以自界说束缚,从.NET Core 3.0开始,有一个IControllerConvention用于此目标的接口。 options.Conventions.Add(new MyCustomConvention()); 虽然我们还可以通过差异定名空间中的接口举办束缚 options.Conventions.Add(new VersionByNamespaceConvention()); 好比下面这种文件情势 api/v1/UsersController 映射后的路径如下所示 api/1.0/users 到此这篇关于ASP.NET Core3.x API版本节制的实现的文章就先容到这了,更多相干ASP.NET Core3.x API版本节制内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家! (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |