关于限流的文章,博客园内还是有挺多的。本文做了一个基于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、对需要控制的接口或者控制器加上头标示

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

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

  1. [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

WebApi接口访问频率控制的实现的更多相关文章

  1. WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数

    本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引 ...

  2. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  3. ASP.NET MVC对WebAPI接口操作(添加,更新和删除)

    昨天<怎样操作WebAPI接口(显示数据)>http://www.cnblogs.com/insus/p/5670401.html 既有使用jQuery,也有使作HttpClient来从数 ...

  4. 在IIS托管服务中设置Rewrite重定向到webapi接口

    最近公司遇到这样一个问题.公司以前使用一个SiteServer CMS开源框架来搭建网站,是以asp.net开发的,并且托管在IIS中.其中出现了一个问题,就是用ajax访问不了这个框架后台的weba ...

  5. Web API的接口访问安全性

    使用签名获取Token 首先我们自定义appkey.appSecret.可用GUID随机生成,AppSecret要不定期更换.然后放到配置文件中. Appkey=1AF62C68-B970-46E7- ...

  6. 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架

    Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...

  7. Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构

    2018-08-16 09:27 更新 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 后文 ...

  8. ASP.NET Aries 高级开发教程:如何写WebAPI接口

    前提: 最近,有不少同学又问到,Aries里如何提供WebAPI接口? 针对这个问题,今天给顺路写个教程,其实呢,很简单的. 方式一:直接用WebService提供接口. 用这种方式,直接添加接口就可 ...

  9. WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用

    背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...

随机推荐

  1. Android基础总结(7)——异步消息处理

    服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...

  2. iosiOS 地图 自定义以及添加锚点

    - (void)clickLongPress:(UILongPressGestureRecognizer *)longPress { CGPoint point = [longPress locati ...

  3. C++记录debug信息的log类

    取自:http://www.viksoe.dk/code/all_mfc.htm,里面有各种MFC常用的类 // LogFile.h: interface for the CLogFile class ...

  4. angular $apply()以及$digest()讲解

    重点的东西放上面,说三遍: 记住的最重要的是ng是否能检测到你对于model的修改.如果它不能检测到,那么你就需要手动地调用$apply()! 记住的最重要的是ng是否能检测到你对于model的修改. ...

  5. leetcode 38

    38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows:1, 11, ...

  6. 用绝对路径引用JS、CSS

    项目中,最好使用绝对路径引用JS和CSS文件,详情如下: 1.vm文件中: <link rel="stylesheet" href="$!{request.cont ...

  7. 为 HTML 添加新元素

    你可以为 HTML 添加新的元素. 该实例向 HTML 添加的新的元素,并为该元素定义样式,元素名为 <myHero> : 实例 <!DOCTYPE html> <htm ...

  8. zend studio导入thinkphp的乱码问题

    刚刚导入thinkphp有乱码还有错误怎么办? windows -> preference -> Work space -> text file encodeing设置为 UTF-8 ...

  9. 用,隔开sql临时表

    IF OBJECT_ID('[kkd].[proc_kkd_GetAutoExamineBid]') IS NOT NULL BEGIN DROP PROC [kkd].[proc_kkd_GetAu ...

  10. BGP学习笔记

    源自红茶三杯: BGP应用于大规模网络或运营商,用作在AS间传递路由信息 使用BGP的三大理由 1. 大量路由需要承载, IGP只能容纳千条,而BGP可以容纳上万(应该是IGP结合BGP使用?) 2. ...