1. 优点
- 有助于保护原有系统,不受影响,并及时修改问题
- 可以实现用户的私人定制(比如是付费接口)
- 快速迭代
- 在URL中追加版本或者作为查询字符串参数
- 通过自动以标头和通过接受标头
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="4.2.0" /><PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="4.2.0" />2.1.1 常用配置[ApiVersion("1.1")] //设置版本号[ApiVersionNeutral]//退出版本控制[MapToApiVersion("1.1")] //设置独立版本[ApiVersion("1.0", Deprecated = true)]//api版本已经被弃用HttpContext.GetRequestedApiVersion().ToString(); //访问版本信息 2.2 QueryString来实现版本控制2.2.1 ConfigureServices中配置//Versioning用来实现API的版本控制services.AddApiVersioning(options =>{options.DefaultApiVersion = new ApiVersion(1, 1);//默认版本号options.AssumeDefaultVersionWhenUnspecified = true;//此选项将用于不提供版本的请求,默认情况下假定API的版本为1.0options.ReportApiVersions = true;//当设置为true时候,api将返回响应标头中支持的版本信息//下面这句默认不写也可以//options.ApiVersionReader = new QueryStringApiVersionReader(parameterNames: "api-version");//该名称用于查询时候使用});2.2.2 控制器设置版本namespace NetCore_SwaggerVersion.Controllers.v1{/// <summary>/// 版本1.1/// </summary>[Route("api/[controller]")][ApiController][ApiVersion("1.1")]//可以设置多个[ApiVersion("1.2")]public class TestController : ControllerBasenamespace NetCore_SwaggerVersion.Controllers.v2{/// <summary>/// 版本2.0/// </summary>[Route("api/[controller]")][ApiController][ApiVersion("2.6")]public class TestController : ControllerBase不同命名空间下可以存在相同的控制器2.2.3 特定方法设置版本
[MapToApiVersion("1.1")][HttpGet]public IEnumerable<string> Get()2.2.4 设置不受版本控制 [ApiVersionNeutral]//退出版本控制[ApiController][Route("api/[controller]/[action]")]public class WeatherForecastController : ControllerBase2.3.5 访问地址http://localhost:5000/api/WeatherForecast/Get //不写版本号的话走的是默认的版本号http://localhost:5000/api/Test?api-version=1.1http://localhost:5000/api/Test?api-version=1.2http://localhost:5000/api/Test?api-version=2.62.3 URL Path Segment来实现版本控制2.3.1 ConfigureServices中配置//Versioning用来实现API的版本控制services.AddApiVersioning(options =>{options.DefaultApiVersion = new ApiVersion(1, 1);//默认版本号options.AssumeDefaultVersionWhenUnspecified = true;//此选项将用于不提供版本的请求,默认情况下假定API的版本为1.0options.ReportApiVersions = true;//当设置为true时候,api将返回响应标头中支持的版本信息});2.3.2 控制器设置版本namespace NetCore_SwaggerVersion.Controllers.v1{/// <summary>/// 版本1.1/// </summary>[Route("api/v{version:apiVersion}/[controller]")][ApiController][ApiVersion("1.0")][ApiVersion("1.1")]//定义控制器提供哪个版本的APIpublic class TestController : ControllerBasenamespace NetCore_SwaggerVersion.Controllers.v2{/// <summary>/// 版本2.0/// </summary>[Route("api/v{version:apiVersion}/[controller]")][ApiController][ApiVersion("2.6")]public class TestController : ControllerBase不同命名空间下可以存在相同的控制器2.3.3 特定方法设置版本
[MapToApiVersion("1.1")][HttpGet]public IEnumerable<string> Get()2.3.4 设置不受版本控制[ApiVersionNeutral]//退出版本控制[ApiController][Route("api/[controller]/[action]")]public class WeatherForecastController : ControllerBase2.3.5 访问地址http://localhost:5000/api/v1.0/Testhttp://localhost:5000/api/v1.1/Testhttp://localhost:5000/api/v2.6/Testhttp://localhost:5000/api/WeatherForecast/Get 不受版本控制2.4 HTTP Headers来实现版本控制2.4.1 ConfigureServices中配置 //Versioning用来实现API的版本控制services.AddApiVersioning(options =>{options.DefaultApiVersion = new ApiVersion(1, 1);//默认版本号options.AssumeDefaultVersionWhenUnspecified = true;//此选项将用于不提供版本的请求,默认情况下假定API的版本为1.0options.ReportApiVersions = true;//当设置为true时候,api将返回响应标头中支持的版本信息//header传递版本信息options.ApiVersionReader = new HeaderApiVersionReader("version");options.ApiVersionSelector = new CurrentImplementationApiVersionSelector(options);//如果没有传输版本号,那么会使用最大版本号LowestImplementedApiVersionSelector是最小版本号options.UseApiBehavior = false;//是否使用API行为});
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 线程安全问题无大小:Java中的线程安全之操作共享数据分类
- 曹操在官渡之战和赤壁之战一胜一负的原因,官渡之战曹操胜,赤壁之战曹操败,启示
- 潘粤明|潘粤明新剧《新居之约》定档,又被催减肥,越减越胖自有他的底气
- 王莽是刘秀所灭还是刘玄,刘玄之后谁做了皇帝
- 俯卧撑什么时候做比较好呢
- 朱高炽的皇后叫什么名字,朱高炽之后是谁当的皇帝
- 隋唐之猛将秦琼,在名著隋唐演义中秦琼的表弟
- 落凤坡是在庞统死后改的名的吗,庞统落凤坡之谜
- 夫妻之间冷战怎么修复?
- 岁寒然后知松柏之凋也出自哪首诗?
