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

时间: 2024-10-29 12:14:37

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

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

本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引用了 config 配置文件 没有的 key 值 private static string WatchSwitch = ConfigurationManager.AppSettings["WatchSwitch"].ToString().Trim(); //最小提现额度 config 文

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

简单做个webapi(查询+添加)接口 首先,我们需要有一个webapi接口项目,我这里以前面WebApi接口 - 响应输出xml和json文章的项目来构建本篇文章的测试用例:这里新建一个 DbData 数据源类,主要用来做数据存储和提供查询列表数据及添加数据方法,具体代码如:  1 public class DbData 2     { 3         public static DbData Current 4         { 5             get 6         

HTTP接口访问类

using UnityEngine;using System.Collections;using System;using System.Text;using LitJson;using System.Collections.Generic;using NetworkMessages;using System.Reflection; /// <summary>/// HTTP接口访问类/// </summary>public class WebAccess : MonoBehavi

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

Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Throttle支持IP.用户身份.Request Header.Request QueryString等多种限流策略,支持黑名单和白名单功能,支持全局拦截和单独Api拦截. Dnc.Api.Throttle暂时只支持Redis作为缓存和存储库,后续会进行扩展. 开始使用 安装Dnc.Api.Thrott

孢子框架-接口访问层、ESB、微服务API GateWay对比

如果从百度去搜索“接口访问层”你会发现主要是.NET里面的技术,叫做IDAL,其实是数据访问层接口.它的主要作用是兼容多种数据库.比如你定义一个标准接口,然后实现改接口的SqlServer访问和Oracle访问,那么利用IDAL就可以自由切换数据库.看.NET DEMO PetShop4,总共有22个项目.大体思想是3层,从Model.DAL.BLL,然后他在各层上又采用了工厂模式,把逻辑与实现想分离,比如以前BLL直接调用DAL就好了,但现在BLL却调用了IDAL,IDAL就是一个接口层,里面

Odoo(OpenERP)开发实践:通过XML-RPC接口访问Odoo数据库

Odoo(OpenERP)服务器支持通过XML-RPC接口访问.操作数据库,基于此可实现与其他系统的交互与集成. 本文是使用Java通过XMLRPC接口操作Odoo数据库的简单示例.本例引用的jar包包括xmlrpc-common-3.1.3.jar, xmlrpc-client-3.1.3.jar和ws-commons-util-1.0.2.jar,如需要,可点击这里下载. package memo.by.weichen; import java.net.URL; import java.ut

WebApi 接口参数不再困惑:传参详解

转自:http://www.cnblogs.com/landeanfen/p/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的传递 三.put请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 四.delete请求 五.总结 正文 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如

asp.net mvc,基于aop实现的接口访问统计、接口缓存等

其实asp.net 上aop现有的框架应该蛮多的,比如静态注入式的PostSharp(新版本好像已经商业化了,旧版本又不支持.net4.0+),或者通过反射的(性能会降低). 本文则是通过mvc其中一种方法拦截器ActionFilter(参考网上已经有很多类似例子). 首先新建一个日志控制类,命名为ApiLogAttribute,继承于ActionFilterAttribute /// <summary> /// 记录访问日志以及站点安全检查 /// </summary> publ

(6)s3c2440用I2C接口访问EEPROM

在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来,最后还是放弃了.甚至参考了linux下i2c-algo-bit.c和i2c-gpio.c,依然没调出来.如果有示波器,可能很快就能找到原因,现在完全不知道问题出在哪里.其实想用GPIO模拟I2C的目的很简单,以一种简单而又深刻的方式来理解I2C. 既然这条路暂时没法走,退而求其次,用s3c2440的