Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现
起因:
近期项目中,提供了一些调用频率较高的api接口,需要保障服务器的稳定运行;需要对提供的接口进行限流控制。避免因客户端频繁的请求导致服务器的压力。
一、aspnetcoreratelimit 介绍
aspnetcoreratelimit 是一个asp.net core速率限制的解决方案,旨在控制客户端根据ip地址或客户端id向web api或mvc应用发出的请求的速率。aspnetcoreratelimit包含一个 ipratelimitmiddleware 和 clientratelimitmiddleware ,每个中间件可以根据不同的场景配置限制允许ip或客户端,自定义这些限制策略,也可以将限制策略应用在每个api url或具体的http method上。
二、aspnetcoreratelimit使用
由上面介绍可知aspnetcoreratelimit支持了两种方式:基于 客户端ip( ipratelimitmiddleware) 和客户端id( clientratelimitmiddleware )速率限制 接下来就分别说明使用方式
添加nuget包引用:
基于客户端ip速率限制
1、修改startup.cs中方法:
2、在appsettings.json中添加通用配置项节点:(ipratelimiting节点与startup中取的节点对应)
配置节点已添加相应注释信息。
规则设置格式:
端点格式: {http_verb}:{path}
,您可以使用asterix符号来定位任何http谓词。
期间格式: {int}{period_type}
,您可以使用以下期间类型之一: s, m, h, d
。
限制格式: {long}
3、特点ip限制规则设置,在appsettings.json中添加 ip规则配置节点
基于客户端id速率限制
1、修改startup文件:
2、通用配置采用ip限制相同配置,添加客户端限制配置:
3、调用结果:
设置规则:1s只能调用一次:首次调用
调用第二次:自定义返回内容
三、其他
运行时更新速率限制
添加 ipratelimitcontroller控制器:
分布式部署时,需要将速率限制计算器和ip规则存储到分布式缓存中如redis
修改注入对象
添加nuget包 microsoft.extensions.caching.stackexchangeredis
在startup中设置redis连接
限制时自定义相应结果:
调用时返回结果:
其他:
示例代码:https://github.com/cwsheng/webapiversiondemo
到此这篇关于asp.net core 限流控制(aspnetcoreratelimit)的实现的文章就介绍到这了,更多相关asp.net core 限流控制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
在ASP.NET Core 中发送邮件的实现方法(必看篇)
-
ASP.NET Core基于微软微服务eShopOnContainer事件总线EventBus的实现
-
ASP.NET Core中自定义路由约束的实现
-
详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁
-
ASP.NET Core2实现静默获取微信公众号的用户OpenId
-
Asp.net Core MVC中怎么把二级域名绑定到特定的控制器上
-
Asp.Net Core中基于Session的身份验证的实现
-
在ASP.NET Core 中发送邮件的实现方法(必看篇)
-
ASP.NET Core MVC 中实现中英文切换的示例代码
-
浅谈如何在ASP.NET Core中实现一个基础的身份认证