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 = true
11                 }
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             try
12             {
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

posted @ 2016-04-19 10:54  SzeCheng  阅读(6564)  评论(4编辑  收藏  举报