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");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值