ASP.NET Web API 控制请求频率
2015-02-12 17:43
417 查看
参考地址:http://www.cnblogs.com/shanyou/p/3194802.html
安装nuget包:WebApiContrib
很多的api,例如GitHub’s API 都有流量控制的做法。使用速率限制,以防止在很短的时间量客户端向你的api发出太多的请求.例如,我们可以限制匿名API客户端每小时最多60个请求,而我们可以让更多的经过认证的客户端发出更多的请求。那么asp.net webapi如何实现这样的功能呢?在项目WebApiContrib 上面已经有了一个实现:https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/MessageHandlers/ThrottlingHandler.cs ,具有良好的可扩展性。
最简单的方法是使用ThrottlingHandler注册使用简单的参数,例如控制每个用户每小时60个请求:
安装nuget包:WebApiContrib
很多的api,例如GitHub’s API 都有流量控制的做法。使用速率限制,以防止在很短的时间量客户端向你的api发出太多的请求.例如,我们可以限制匿名API客户端每小时最多60个请求,而我们可以让更多的经过认证的客户端发出更多的请求。那么asp.net webapi如何实现这样的功能呢?在项目WebApiContrib 上面已经有了一个实现:https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/MessageHandlers/ThrottlingHandler.cs ,具有良好的可扩展性。
最简单的方法是使用ThrottlingHandler注册使用简单的参数,例如控制每个用户每小时60个请求:
config.MessageHandlers.Add(new ThrottlingHandler( new InMemoryThrottleStore(), id => 60, TimeSpan.FromHours(1)));
IThrottleStore接口 使用ID +当前的请求数量。InMemoryThrottleStore 只有一个内存中存储,但你可以轻松地扩展实现为分布式缓存或数据库。还可以轻松地自定义ThrottlingHandler的行为,例如我们针对一个ip地址可以更好的进行控制。
config.MessageHandlers.Add(new ThrottlingHandler( new InMemoryThrottleStore(), id => { if (id == "10.0.0.1") { return 5000; } return 60; }, TimeSpan.FromHours(1)));
相关文章推荐
- 控制ASP.NET Web API 调用频率
- 控制ASP.NET Web API 调用频率
- ASP.NET Web API实践系列09,在Fiddler和控制台中模拟GET和POST请求
- 控制ASP.NET Web API 调用频率
- 控制ASP.NET Web API 调用频率
- 控制ASP.NET Web API 调用频率
- ASP.NET Web API是如何根据请求选择Action的?[下篇] 【转】
- asp.net web API 的调用返回Json值 POST方式请求
- 如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?
- asp.net web api 解决ajax跨站点post请求提交 json 数据问题
- asp.net web api 接口安全与角色控制
- 报错:ASP.NET Web API中找不到与请求匹配的HTTP资源
- ASP.NET Web API 记录请求响应数据到日志的一个方法
- ASP.NET web api 跨域请求
- 如果调用ASP.NET Web API不能发送PUT/DELETE请求怎么办?
- ASP.NET Web API 通过参数控制返回类型(JSON|XML)
- ASP.NET Web API是如何根据请求选择Action的?[上篇] 【转】
- Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?
- 关于ASP.NET Web API 客户端的请求报文中添加 Authorization
- ASP.NET Web API是如何根据请求选择Action的?[上篇]