ASP.NET Web API中实现版本
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
以上是关于ASP.NET Web API中实现版本的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?
如何在 ASP.NET MVC 5 和 WEB API 2 中实现 oauth2 服务器 [关闭]
以干净的方式在 Asp.Net Core API 中实现 ProblemDetails 的最佳方法
如何使用 asp.net Web 表单在 Telerik 树中实现搜索和过滤