起因:

近期项目中,提供了一些调用频率较高的api接口,需要保障服务器的稳定运行;需要对提供的接口进行限流控制。避免因客户端频繁的请求导致服务器的压力。

一、aspnetcoreratelimit 介绍

aspnetcoreratelimit 是一个asp.net core速率限制的解决方案,旨在控制客户端根据ip地址或客户端id向web api或mvc应用发出的请求的速率。aspnetcoreratelimit包含一个 ipratelimitmiddlewareclientratelimitmiddleware ,每个中间件可以根据不同的场景配置限制允许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 限流控制内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!