• 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

  • 相关阅读:
    整合规则引擎urule
    vue学习
    发送put请求,get请求
    jpa自定义字段
    spring的3种配置方式
    netty
    springsercurity和shiro
    git报错
    Scrapy全站数据爬取
    python操作Excel模块openpyxl
  • 原文地址:https://www.cnblogs.com/SzeCheng/p/5407316.html
Copyright © 2020-2023  润新知