一般来说,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");

ASP.NET Web API中实现版本相关推荐

  1. ASP.NET Web API中实现版本的几种方式

    在ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了.如何实现API的版本呢? 1.通过路由设置版本 最简单的一种方式是通过路由设置,不同的路由,不同的版本,不同的contr ...

  2. 监控系统简介(二):使用 App Metrics 在 ASP.NET Web API 中记录指标

    回顾 在<监控系统简介:使用 Prometheus 与 Grafana>一文中,我们了解了什么是监控系统,Prometheus 这一监控工具及它提供的数据类型.PromQL 以及 Graf ...

  3. (四)Asp.net web api中的坑-【api的返回值】

    (四)Asp.net web api中的坑-[api的返回值] 原文:(四)Asp.net web api中的坑-[api的返回值] void无返回值 IHttpActionResult HttpRe ...

  4. ASP.NET Web API中的参数绑定总结

    ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...

  5. 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie

    5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.NET Web API中的HTTP Cookie 本文引自:http://www.asp.net/web-api ...

  6. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  7. 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理

    在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ...

  8. 在ASP.NET Web API中返回错误的最佳实践

    本文翻译自:Best practice to return errors in ASP.NET Web API I have concerns on the way that we returns e ...

  9. 在ASP.NET Web API中使用OData的Action和Function

    本篇体验OData的Action和Function功能.上下文信息参考"ASP.NET Web API基于OData的增删改查,以及处理实体间关系".在本文之前,我存在的疑惑包括: ...

最新文章

  1. leetcode-45 跳跃游戏II
  2. 极限编程 (Extreme Programming) - 迭代计划 (Iterative Planning)
  3. 原生js实现preAll和nextAll方法
  4. 【CyberSecurityLearning 34】Linux脚本编写(Shell脚本)
  5. CentOS FTP服务(vsftpd)配置
  6. python取列表中位数_Python如何获取列表(List)的中位数
  7. 【Flink】双亲委派模型与Flink的类加载策略 child-first parent-first
  8. vue.js java php_听说Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js
  9. CSDN Cookbook by Eric
  10. Bailian2899 Bailian3242 矩阵交换行【矩阵】
  11. jquery页面跳转带cookie_python socket编程:实现redirect函数、cookie和session
  12. VS2013中安装配置和使用Boost库
  13. JAVA笔记自整理(Java)
  14. 关于ESD的一些知识
  15. 微软:今天起加速推广Windows 11,让更多设备免费升级
  16. 蓝牙耳机什么样式最舒服?推荐一款好用的蓝牙耳机
  17. jquery.fly.js实现添加购物车效果、实现抛物线运动
  18. nacos 一直访问本地地址
  19. 黑盒测试技术中的等价类划分法、边界值分析法、因果图法和决策表法进行测试用例设计
  20. 怎么在oracle里执行sql语句,在Oracle中执行动态SQL的几种方法

热门文章

  1. 常胜游戏系列:填满硬币
  2. icewm使用心得[转]
  3. c++ int 转 short_C/C++结构体内存对齐
  4. C#将unix时间戳转换成.net的DateTime类型的代码
  5. 运行tomcat报Exception in thread ContainerBackgroundProcessor[StandardEngine[Catalina]]
  6. Tomcat - Tomcat安装
  7. 【转】Linux中断处理学习笔记
  8. 用SmarterFox替换Internet Explorer的“加速器”
  9. twitter批量取消关注_如何在Twitter上取消阻止“潜在敏感内容”
  10. linux下设备或资源忙,linux删除文件目录 目录设备或资源忙怎么办