ASP.NET Web API中实现版本

一般来说,api 接口是提供给其他系统或是其他公司使用,不能随意频繁的变更。然而,需求和业务不断变化,接口和参数也会发生相应的变化。如果直接对原来的接口进行修改,势必会影响线其他系统的正常运行。这就必须对api 接口进行有效的版本控制。

例如,添加用户的接口,由于业务需求变化,接口的字段属性也发生了变化而且可能和之前的功能不兼容。为了保证原有的接口调用方不受影响,只能重新定义一个新的接口。

http://localhost:8080/api/v1/user

http://localhost:8080/api/v2/user

在ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了。如何实现API的版本呢?

通过路由设置,不同的路由,不同的版本,不同的controller。

//带版本号的路由控制config.Routes.MapHttpRoute("DefaultVersionApi", "api/{version}/{module}/{controller}/{action}");//将自定义Action选择器替换系统默认config.Services.Replace(typeof(IHttpActionSelector), new CustomActionSelector());

获取接口调用版本号

/// <summary>/// 获取接口调用版本号/// </summary>/// <returns>接口调用版本号</returns>protected int GetApiVersionNo(){try{var versionStr = RequestContext.RouteData.Values["version"];var tmpArray = versionStr?.ToString().ToLower().Replace("v", "").Split('.');if (tmpArray == null || tmpArray.Length == 0)return 0;var tmpStr = tmpArray[0];tmpStr = tmpArray.Skip(1).Aggregate(tmpStr, (current, v) => current + v.PadLeft(3, '0'));tmpStr = tmpStr.PadRight(7, '0');int versionInt;return int.TryParse(tmpStr, out versionInt) ? versionInt : 0;}catch{return 0;}}
if (!exAccounts.Contains(info.Account) && GetApiVersionNo() < (int)VersionNumber.Version210)throw new CustomException("登录失败,请下载最新版登录!", "E100011");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个娃娃竟然拍出50万......

1 瞎说什么大实话&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 这个娃娃50万用来求婚用&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 当代年轻人的特别祝福▼4 在福字底下加一横&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 冰激凌…

切图崽的自我修养-规范CSS元素命名

前言 为什么我刚才写的样式乱了&#xff1f;&#xff01;如何给变量&#xff0c;文件命名是程序员的老大难问题。命名为什么会这么难&#xff0c;因为它太重要了。可以这么说&#xff0c;准确的命名可以提高代码的可读性&#xff0c;让人容易理解&#xff0c;方便调试&#xff…

批量获取域名解析地址socketthread

import threadimport socketdef getIP(name,lock):print [%s]:%s\n%(name,socket.gethostbyname(name))lock.release() #释放线程锁def main():#读取存放域名的文件&#xff0c;文件是按一行一个域名的方式记录的files open(rC:\Users\Administrator\Desktop\python_script\na…

《SAS编程与数据挖掘商业案例》学习笔记之七

九&#xff1a;put语句 可以输出变量信息到指定地点&#xff0c;包括输出到sas系统的日志窗口&#xff1b; 输出到file语句规定的外部文件 输出到sas系统的output窗口 单尾操作符&#xff0c;多用于input语句中&#xff0c;双尾操作符&#xff0c;多用于put语句中。 Data a; In…

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

从kbmmw 4.4 开始&#xff0c;增加了认证管理器&#xff0c;这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。 要做一个认证管理&#xff0c;大概分为以下5步&#xff1a; 1. 定义你要保护的资源&#xff0c;一般是服务、函数&#xff0c;…

算法分析笔记

2019独角兽企业重金招聘Python工程师标准>>> 定义 定义&#xff1a; 若存在正常数 c 和 n<sub>0</sub> 使得当 N ≥ n<sub>0</sub> 时 T(N) ≤ cf(N)&#xff0c;则记为 T(N) O(f(N))若存在正常数 c 和 n<sub>0</sub> 使得当 …

C++指针详解

C指针详解指针的概念 指针是一个特殊的变量&#xff0c;它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容&#xff1a;指针的类型&#xff0c;指针所指向的类型&#xff0c;指针的值或者叫指针所指向的内存区&#xff0c;还有指针本身所…

.NET 6新特性试用 | PriorityQueue

前言我们常用Queue<T>类来表示先进先出(FIFO)集合&#xff0c;集合中的对象按照放入顺序检索。例如&#xff1a;var jobs new Queue<Job>();jobs.Enqueue(new Job() { Id 1 }); jobs.Enqueue(new Job() { Id 2 }); jobs.Enqueue(new Job() { Id 3 });while (jo…

数字效率Evernote超效率数字笔记术

文章结束给大家来个程序员笑话&#xff1a;[M] 每日一道理 古人云&#xff1a;“海纳百川&#xff0c;有容乃大。”人世间&#xff0c;不可能没有矛盾和争吵&#xff0c;我们要以磊落的胸怀和宽容的微笑去面对它 。哈伯德也曾说过&#xff1a;“宽恕和受宽恕的难以言喻的快乐&a…

千万别让爸妈帮你P图......

1 如何把外来称呼本土化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 奇奇怪怪的知识又增加了&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 好家伙&#xff01;洪世贤家烛台上插的是火腿肠▼4 妨碍公务的下场&#xff08;素材来源网络&#xff0c…

对大数据知识架构的梳理

近期交接了前期的大数据项目&#xff0c;对之前的项目内容做一个总结。也算是梳理一下项目的架构&#xff0c;对前期也算是一个总结&#xff0c;为后期的学习打下一个基础。清理数据对传统行业来说&#xff0c;上来就说要搞大数据&#xff0c;一般都会是一种噱头&#xff0c;因…

WPF 不遮挡任务栏最大化和全屏显示

在窗体不去边框的情况下&#xff0c;不遮挡任务栏最大化MainWindow.xaml.csusing System; using System.Windows; using System.Windows.Threading;namespace thzSoftware {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWi…

C#中'??'符的使用

?? 用于判断当前对象是否为null. 语法: 对象 ?? "当前对象为null时赋的默认值". string nullString null; string Kong ""; string a nullString ?? "能判断为null"; string b Kong ?? "能判断为空"; 执行结果&#xff1…

将 iOS 应用的体积控制在 20MB 以内对于其下载量有很明显的影响吗?

分类&#xff1a;iPhone开发 标签&#xff1a;App大小、下载量、应用体积 比如&#xff0c;Angry bird 、Cut The Rope 游戏内容很丰富的应用都能将其体积控制在 20MB 。iOS 限制允许 3G 网络下载应用的体积不超过 20MB &#xff0c;通过 3G 下载的应用用户非常多吗&#xff1…

看完后震惊!清华“姚班”创始人的老师究竟有多牛?他说孩子最应该培养这几个思维……...

▲ 点击查看相信很多人都挺听说过清华有个“姚班”&#xff0c;致力于培养与美国麻省理工学院等世界一流高校本科生具有同等、甚至更高竞争力的计算机科学人才。“姚班”是我国著名科学家姚期智所创&#xff0c;因此得名“姚班”。姚期智教授是2000年图灵奖得主&#xff0c;也是…

Android之线程池

http://www.trinea.cn/android/java-android-thread-pool/ 介绍new Thread的弊端及Java四种线程池的使用&#xff0c;对Android同样适用。本文是基础篇&#xff0c;后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗&#xff…

数据库自增主键可能产生的问题

在MySQL中经常会配置自增长属性的字段作为主键&#xff0c;特别是使用InnoDB存储引擎&#xff0c;因为InnoDB的聚集索引的特性&#xff0c;使用自增长属性的字段当主键性能更好&#xff0c;但是使用自增主键也可能会带来一些问题。 举个例子&#xff0c;使用自增主键对数据库做…

js中的hasOwnProperty和isPrototypeOf方法

转自&#xff1a;http://www.cnblogs.com/jenry/archive/2010/12/08/1900150.html hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是&#xff0c;此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的…

2021,我在枯燥乏味中寻找坚持下去的理由

这是头哥侃码的第248篇原创2021年&#xff0c;因为疫情和工作变更的关系&#xff0c;不仅我的工作方式被彻底改变&#xff08;居家远程办公&#xff09;&#xff0c;而且还在健身房悟出一个心得体会。啥心得&#xff1f;啥体会&#xff1f;那就是觉得人生逐渐变得没有意思。不知…