ASP.NET Core WebApi版本节制的实现

 在日常项目开拓中,跟着项目需求不绝的累加、不绝的迭代;项目处事接口需要向下兼容汗青版本;前些时候就因为Api接口为做版本打点导致接口对低版本兼容处理惩罚不友好。

 最近就像相识下如何实现WebApi版本节制,那么版本节制有什么长处呢?

 WebApi版本节制的长处

有助于实时推出成果, 而不会粉碎现有系统,兼容性处理惩罚更友好。

它还可以辅佐为选定的客户提供特另外成果。

 接下来就来实现版本节制以及在Swagger UI中接入WebApi版本

一、WebApi版本节制实现 

 通过Microsoft.AspNetCore.Mvc.Versioning实现webapi 版本节制

建设WebApi项目,添加Nuget包:Microsoft.AspNetCore.Mvc.Versioning

Install-Package Microsoft.AspNetCore.Mvc.Versioning

修改项目Startup文件,利用Microsoft.AspNetCore.Mvc.Versioning

public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { //按照需要配置,以下内容 services.AddApiVersioning(apiOtions => { //返反响应标头中支持的版本信息 apiOtions.ReportApiVersions = true; //此选项将用于不提供版本的请求。默认环境下, 假定的 API 版本为1.0 apiOtions.AssumeDefaultVersionWhenUnspecified = true; //缺省api版本号,支持时间或数字版本号 apiOtions.DefaultApiVersion = new ApiVersion(1, 0); //支持MediaType、Header、QueryString 配置版本号;缺省为QueryString、UrlSegment配置版本号;后头会具体说明对付浸染 apiOtions.ApiVersionReader = ApiVersionReader.Combine( new MediaTypeApiVersionReader("api-version"), new HeaderApiVersionReader("api-version"), new QueryStringApiVersionReader("api-version"), new UrlSegmentApiVersionReader()); }); services.AddControllers(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); //利用ApiVersioning app.UseApiVersioning(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }

WebApi配置版本:

  a)通过ApiVersion标志指定指定节制器或要领的版本号;Url参数节制版本(QueryStringApiVersionReader),如下:

namespace WebAPIVersionDemo.Controllers { [ApiController] [Route("[controller]")] //Deprecated=true:暗示v1即将弃用,响应头中返回 [ApiVersion("1.0", Deprecated = true)] [ApiVersion("2.0")]public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"}; [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random(); return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = rng.Next(-20, 55), Summary = $"v1:{Summaries[rng.Next(Summaries.Length)]}" }) .ToArray(); } } }

  通过参数api-version参数指定版本号;挪用功效:

ASP.NET Core WebApi版本控制的实现

ASP.NET Core WebApi版本控制的实现

  b)通过Url Path Segment节制版本号(UrlSegmentApiVersionReader):为节制器添加路由方法如下,apiVersion为牢靠名目  

[Route("/api/v{version:apiVersion}/[controller]")]

  挪用方法:通过挪用路径传入版本号,如::5000/api/v1/weatherforecast

ASP.NET Core WebApi版本控制的实现

  c)通过Header头节制版本号:在Startup中配置(HeaderApiVersionReader、MediaTypeApiVersionReader)

apiOtions.ApiVersionReader = ApiVersionReader.Combine( new MediaTypeApiVersionReader("api-version"), new HeaderApiVersionReader("api-version"));

  挪用方法,在请求头或中MediaType中通报api版本,如下:

ASP.NET Core WebApi版本控制的实现

ASP.NET Core WebApi版本控制的实现

其他说明:

    a)ReportApiVersions配置为true时, 返回当前支持版本号(api-supported-versions);Deprecated 参数配置为true暗示已弃用,在响应头中也有显示(api-deprecated-versions):

ASP.NET Core WebApi版本控制的实现

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdxzx.html