iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET如何实现API版本控制
  • 857
分享到

.NET如何实现API版本控制

2023-07-02 15:07:57 857人浏览 八月长安
摘要

今天小编给大家分享一下.net如何实现api版本控制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 优点有助于保护原有系

今天小编给大家分享一下.net如何实现api版本控制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    1. 优点

    • 有助于保护原有系统,不受影响,并及时修改问题

    • 可以实现用户的私人定制(比如是付费接口)

    • 快速迭代

    2. API版本控制

    • 在URL中追加版本或者作为查询字符串参数

    • 通过自动以标头和通过接受标头

    2.1 安装组件

    asp.net API versioning为您提供了一种功能强大但易于使用的方法,用于将API版本控制语义添加到使用ASP.NET构建的新的和现有的REST服务中。API版本控制扩展定义了简单的元数据属性和约定,用于描述您的服务实现了哪些API版本。

        <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.0                options.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 : ControllerBase    namespace 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 : ControllerBase
    2.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.6

    2.3 URL Path Segment来实现版本控制

    2.3.1 ConfigureServices中配置
                //Versioning用来实现API的版本控制            services.AddApiVersioning(options =>            {                options.DefaultApiVersion = new ApiVersion(1, 1);//默认版本号                options.AssumeDefaultVersionWhenUnspecified = true;//此选项将用于不提供版本的请求,默认情况下假定API的版本为1.0                options.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")]//定义控制器提供哪个版本的API    public class TestController : ControllerBase    namespace 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 : ControllerBase
    2.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.0                options.ReportApiVersions = true;//当设置为true时候,api将返回响应标头中支持的版本信息                //header传递版本信息                options.ApiVersionReader = new HeaderApiVersionReader("version");                options.ApiVersionSelector = new CurrentImplementationApiVersionSelector(options);//如果没有传输版本号,那么会使用最大版本号  LowestImplementedApiVersionSelector是最小版本号                options.UseApiBehavior = false;//是否使用API行为            });
    2.4.2 控制器设置版本
    namespace NetCore_SwaggerVersion.Controllers.v1{    /// <summary>    /// 版本1.1    /// </summary>    [Route("api/[controller]")]    [ApiController]    [ApiVersion("1.1")]//定义控制器提供哪个版本的API    public class TestController : ControllerBase    namespace NetCore_SwaggerVersion.Controllers.v2{    /// <summary>    /// 版本2.0    /// </summary>    [Route("api/[controller]")]    [ApiController]    [ApiVersion("2.6")]    public class TestController : ControllerBase

    不同命名空间下可以存在相同的控制器

    2.4.3 特定方法设置版本
    [MapToApiVersion("1.1")][HttpGet]public IEnumerable<string> Get()
    2.4.4 设置不受版本控制
        [ApiVersionNeutral]//退出版本控制    [ApiController]    [Route("api/[controller]/[action]")]    public class WeatherForecastController : ControllerBase
    2.4.5 访问地址
    http://localhost:5000/api/Test  //需要在headers里面增加 version: 1.1http://localhost:5000/api/WeatherForecast/Get 不受版本控制

    2.5 同时支持多种模式

    services.AddApiVersioning(o =>{    o.ReportApiVersions = true;    o.AssumeDefaultVersionWhenUnspecified = true;    o.DefaultApiVersion = new ApiVersion(1, 0);    o.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"), new QueryStringApiVersionReader("api-version"));    //或者    //同时支持查询字符串和标头    o.ApiVersionReader = new QueryStrinGorHeaderApiVersionReader(parameterName: "version"){HeaderNames = { "api-version", "x-ms-version" }}});

    2.6 不借助包,封装文件

        public class NameSpaceVersionRoutinGConvention:IApplicationModelConvention    {        private readonly string apiPrefix;        private const string urlTemplate = "{0}/{1}/{2}";        public NameSpaceVersionRoutingConvention(string apiPrefix = "api")        {            this.apiPrefix = apiPrefix;        }        public void Apply(ApplicationModel application)        {            foreach (var controller in application.Controllers)            {                var hasRouteAttribute = controller.Selectors                .Any(x => x.AttributeRouteModel != null);                if (!hasRouteAttribute)                {                    continue;                }                var nameSpaces = controller.ControllerType.Namespace.Split('.');                //获取namespace中版本号部分                var version = nameSpaces.FirstOrDefault(x => Regex.IsMatch(x, @"^v(\d+)$"));                if (string.IsNullOrEmpty(version))                {                    continue;                }                string template = string.FORMat(urlTemplate, apiPrefix, version,                controller.ControllerName);                controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel()                {                    Template = template                };            }        }    }

    调试代码发现这种方式只在程序第一次运行的时候会执行,之后不会再执行多次,因此效率很高。

    以上就是“.NET如何实现API版本控制”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: .NET如何实现API版本控制

    本文链接: https://www.lsjlt.com/news/342854.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • .NET如何实现API版本控制
      今天小编给大家分享一下.NET如何实现API版本控制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 优点有助于保护原有系...
      99+
      2023-07-02
    • .NET实现API版本控制
      目录1. 优点2. API版本控制2.1 安装组件2.1.1 常用配置2.2 QueryString来实现版本控制2.2.1 ConfigureServices中配置2.2.2 控制...
      99+
      2024-04-02
    • thinkphp6 API多版本控制
      项目开发api接口时,一般都是有版本的,比如 v1,v2,v3… 对应的url可以为 /v1/user/index /v2/user/index 像这种模式怎么在thinkphp6.0实现呢 注意...
      99+
      2023-09-03
      php
    • SpringBoot如何实现接口版本控制
      目录SpringBoot 接口版本控制自定义一个版本号的注解接口ApiVersion.java版本号筛选器ApiVersionCondition版本号匹配拦截器配置WebMvcReg...
      99+
      2024-04-02
    • .NET6开发TodoList应用之实现API版本控制
      目录需求目标原理与思路实现添加Nuget Package并配置服务实现API版本控制一点扩展总结需求 API接口版本管理,对于一些规模稍大的企业应用来说,是经常需要关注的一大需求。尽...
      99+
      2024-04-02
    • 如何自定义node版本,实现node多版本控制方式
      目录自定义node版本实现node多版本控制nvmnvm下载安装1.勾选我介绍,然后进行下一步2.选择nvm安装的路径3.选择node安装的位置4.检测是否安装成功 nvm-v&nb...
      99+
      2023-05-16
      自定义node版本 node多版本控制 node版本自定义
    • 如何在PostgreSQL中实现多版本并发控制
      在PostgreSQL中,多版本并发控制是通过使用MVCC(Multi-Version Concurrency Control)机制...
      99+
      2024-04-09
      PostgreSQL
    • 如何在MongoDB中实现数据的版本控制功能
      如何在MongoDB中实现数据的版本控制功能引言:在软件开发和数据处理过程中,版本控制是一个关键的功能。版本控制允许我们对数据进行追踪和记录,以便于回滚、审计和分析。在使用MongoDB数据库时,我们也可以实现数据的版本控制功能。本文将介绍...
      99+
      2023-10-22
      MongoDB 版本控制 数据控制
    • Java如何实现学生管理系统控制台版本
      本篇内容介绍了“Java如何实现学生管理系统控制台版本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建学生类Student pu...
      99+
      2023-07-02
    • 如何在Go语言中实现路由的版本控制
      如何在Go语言中实现路由的版本控制随着软件的迭代更新,特别是在Web开发过程中,版本控制已经成为了一个非常重要的问题。在Go语言中,我们可以通过一些简单的方法来实现路由的版本控制。本文将会介绍如何在Go中实现路由的版本控制,并且提供一些代码...
      99+
      2023-12-17
      Go语言 路由 版本控制
    • Java如何实现ATM银行管理系统控制台版本
      这篇文章主要讲解了“Java如何实现ATM银行管理系统控制台版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现ATM银行管理系统控制台版本”吧!创建抽象类Card类abstr...
      99+
      2023-07-02
    • idea2019上如何配置gitee以实现代码的版本控制
      本篇内容主要讲解“idea2019上如何配置gitee以实现代码的版本控制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“idea2019上如何配置gitee以实现代码的版本控制”吧!登录 Git...
      99+
      2023-07-05
    • mysql多版本并发控制MVCC的实现
      事务隔离级别设置 set global transaction isolation level read committed; //全局的 set session transaction isolat...
      99+
      2024-04-02
    • 如何在ASP.NET中利用WebApi实现一个版本控制功能
      本篇文章为大家展示了如何在ASP.NET中利用WebApi实现一个版本控制功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。WebApi版本控制的好处有助于及时推出功能, 而不会破坏现有系统,兼容性...
      99+
      2023-06-06
    • 如何在Couchbase中实现数据版本控制和历史记录
      在Couchbase中实现数据版本控制和历史记录可以通过以下两种方式来实现: 创建一个历史记录存储桶:可以在Couchbase中...
      99+
      2024-04-09
      Couchbase
    • 如何使用CVS进行版本控制
      如何使用CVS进行版本控制,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。GitHub 网站发布于 2008 年。如果你的软件工程师职业生涯跟我一样,也是晚于此时间的话,Gi...
      99+
      2023-06-06
    • 怎么在DynamoDB中实现数据版本控制
      在DynamoDB中实现数据版本控制可以通过以下几种方式: 使用条件表达式:在更新数据时,可以使用条件表达式来确保只有当数据的版...
      99+
      2024-04-02
    • MySQLMVVC多版本并发控制的实现详解
      目录一、概述二、快照读与当前读1.当前读2.快照读三、隔离级别与版本链复习四、Read View1.实现原理2.Read View规则3.整体流程五、举例1.READ2.REPEAT...
      99+
      2024-04-02
    • MySQL的多版本并发控制MVCC的实现
      目录什么是MVCC MVCC的实现 MVCC 有没有解决幻读? 什么是MVCC MVCC就是多版本并发控制。 MySQL的事务型存储引擎通过多版本并发控制(MVCC)来提升并发性...
      99+
      2024-04-02
    • PHP IDE和Git:如何实现快速文件管理和版本控制?
      随着互联网的迅速发展,PHP作为一种后端编程语言,也越来越被人们所熟知和使用。而在PHP的编程过程中,一个好的开发工具对于提高工作效率和代码质量,起到了至关重要的作用。在这里,我们将会介绍PHP IDE和Git的使用,让您的PHP开发变得...
      99+
      2023-10-25
      ide git 文件
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作