WebApi接口访问频率控制的实现
关于限流的文章,博客园内还是有挺多的。本文做了一个基于Filter限流的例子,算是对WebApiThrottle使用的一个具体的实例。
实现方法:
1、使用Nuget,对WebAPI项目添加WebApiThrottle的引用
2、进行注册,一般是在WebApiConfig的Register方法里添加,代码如下:
config.Filters.Add(new CustomThrottlingFilter()
{
Policy = new ThrottlePolicy()
{
//ip配置区域
IpThrottling = true,
ClientThrottling = true, //端点限制策略配置会从EnableThrottling特性中获取。
EndpointThrottling = true
}
});
其中CustomThrottlingFilter是自己重写的ThrottlingFilter,也可以直接用默认配置。我自定义的CustomThrottlingFilter如下:
public class CustomThrottlingFilter: ThrottlingFilter
{
/// <summary>
/// Sets the indentity.
/// </summary>
/// <param name="request">The request.</param>
/// <returns>RequestIdentity.</returns>
protected override RequestIdentity SetIndentity(HttpRequestMessage request)
{
var sessionId = string.Empty;
try
{
var requestCookie = request.Headers.GetCookies().FirstOrDefault();
if (requestCookie != null)
{
foreach (var item in requestCookie.Cookies.Where(item => item.Name == "Session_Id"))
{
sessionId = item.Value;
break;
}
}
}
catch (Exception)
{
sessionId = string.Empty;
}
return new RequestIdentity()
{
ClientKey = string.IsNullOrWhiteSpace(sessionId) ? sessionId : "anon",
ClientIp = base.GetClientIp(request).ToString(),
Endpoint = request.RequestUri.AbsolutePath.ToLowerInvariant()
};
}
}
3、对需要控制的接口或者控制器加上头标示
[EnableThrottling(PerMinute = )]//控制访问频率,每分钟最多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
WebApi接口访问频率控制的实现的更多相关文章
- WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数
本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引 ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
- ASP.NET MVC对WebAPI接口操作(添加,更新和删除)
昨天<怎样操作WebAPI接口(显示数据)>http://www.cnblogs.com/insus/p/5670401.html 既有使用jQuery,也有使作HttpClient来从数 ...
- 在IIS托管服务中设置Rewrite重定向到webapi接口
最近公司遇到这样一个问题.公司以前使用一个SiteServer CMS开源框架来搭建网站,是以asp.net开发的,并且托管在IIS中.其中出现了一个问题,就是用ajax访问不了这个框架后台的weba ...
- Web API的接口访问安全性
使用签名获取Token 首先我们自定义appkey.appSecret.可用GUID随机生成,AppSecret要不定期更换.然后放到配置文件中. Appkey=1AF62C68-B970-46E7- ...
- 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架
Dnc.Api.Throttle 适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...
- Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构
2018-08-16 09:27 更新 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 强烈推荐使用Springboot来搭建MVC框架! 后文 ...
- ASP.NET Aries 高级开发教程:如何写WebAPI接口
前提: 最近,有不少同学又问到,Aries里如何提供WebAPI接口? 针对这个问题,今天给顺路写个教程,其实呢,很简单的. 方式一:直接用WebService提供接口. 用这种方式,直接添加接口就可 ...
- WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用
背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...
随机推荐
- asp.net中如何绑定combox下拉框数据(调用存储过程)
#region 绑定类型(商品类型.仓库名称) public void DataType_Bind(int _peoid) { DataTable dt_goodsname = new DataTab ...
- oracle中行转列、列转行函数
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...
- SQL常用日期转换
0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM) 1 101 美国 mm/dd/yyyy ...
- 【缓存】.net中Cache管理操作
隐藏行号 复制代码 ? 这是一段程序代码. using System; using System.Web; using System.Web.Caching; using System.Collect ...
- CentOS 6.x 播放 mp3 音乐 —— 成功
参考:http://blog.chinaunix.net/uid-14735472-id-3472898.html centos 6.x 添加 rpmforge 源--- CentOS 6.x 安装 ...
- Symantec System Recovery
目的:备份系统,备份文件,裸机恢复,异机恢复等 工具:http://bbs.kafan.cn/thread-1800182-1-1.html 下载地址:http://pan.baidu.com/s/1 ...
- ASP.NET-----Repeater数据控件的用法总结(转)
一.Repeater控件的用法流程及实例: 1.首先建立一个网站,新建一个网页index.aspx. 2.添加或者建立APP_Data数据文件,然后将用到的数据库文件放到APP_Data文件夹中. 3 ...
- linux常见驱动修改
=============================== 说明 ===============================本文以A5为例,举8种我们公司常用接口的极度精简的驱动程序,只宜参考 ...
- 二、搭建struts2的开发环境
二.搭建struts2的开发环境 下载地址:http://struts.apache.org 解压后的目录结构: apps:框架本身提供一些案例(学习) docs:框架本身提供的文档(指南和API). ...
- POJ C程序设计进阶 编程题#1:寻找下标
编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一 ...