程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

ASP.NET Web API中实现版本(asp.net web api教程)

balukai 2025-05-07 22:57:57 文章精选 6 ℃

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


最近发表
标签列表