你的位置:首页 > ASP.net教程

[ASP.net教程]WebApi接口访问频率控制的实现


关于限流的文章,博客园内还是有挺多的。本文做了一个基于Filter限流的例子,算是对WebApiThrottle使用的一个具体的实例。

实现方法:

1、使用Nuget,对WebAPI项目添加WebApiThrottle的引用

2、进行注册,一般是在WebApiConfig的Register方法里添加,代码如下:

 1     config.Filters.Add(new CustomThrottlingFilter() 2       { 3         Policy = new ThrottlePolicy() 4         { 5           //ip配置区域 6           IpThrottling = true, 7           ClientThrottling = true, 8  9           //端点限制策略配置会从EnableThrottling特性中获取。10           EndpointThrottling = true11         }12       });

其中CustomThrottlingFilter是自己重写的ThrottlingFilter,也可以直接用默认配置。我自定义的CustomThrottlingFilter如下:

 1   public class CustomThrottlingFilter: ThrottlingFilter 2   { 3     /// <summary> 4     /// Sets the indentity. 5     /// </summary> 6     /// <param name="request">The request.</param> 7     /// <returns>RequestIdentity.</returns> 8     protected override RequestIdentity SetIndentity(HttpRequestMessage request) 9     {10       var sessionId = string.Empty;11       try12       {13         var requestCookie = request.Headers.GetCookies().FirstOrDefault();14         if (requestCookie != null)15         {16           foreach (var item in requestCookie.Cookies.Where(item => item.Name == "Session_Id"))17           {18             sessionId = item.Value;19             break;20           }21         }22       }23       catch (Exception)24       {25         sessionId = string.Empty;26       }27       return new RequestIdentity()28       {29         ClientKey = string.IsNullOrWhiteSpace(sessionId) ? sessionId : "anon",30         ClientIp = base.GetClientIp(request).ToString(),31         Endpoint = request.RequestUri.AbsolutePath.ToLowerInvariant()32       };33     }34   }

3、对需要控制的接口或者控制器加上头标示 

 [EnableThrottling(PerMinute = 12)]//控制访问频率,每分钟最多12次

不需要控制访问频率的可以不加或者加上

 [DisableThrotting]

 

这样就实现了使用过滤器控制特定API的访问频率,更多的使用方法可以参考下面的地址。

 

 

参考资料:

WebApiThrottle限流框架使用手册  http://www.cnblogs.com/mushroom/p/4659200.html

控制ASP.NET Web API 调用频率与限流 http://www.cnblogs.com/Irving/p/4664786.html

控制ASP.NET Web API 调用频率 http://www.cnblogs.com/shanyou/p/3194802.html