欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现

程序员文章站 2022-07-06 13:10:45
起因:近期项目中,提供了一些调用频率较高的api接口,需要保障服务器的稳定运行;需要对提供的接口进行限流控制。避免因客户端频繁的请求导致服务器的压力。一、aspnetcoreratelimit 介绍a...

起因:

近期项目中,提供了一些调用频率较高的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只能调用一次:首次调用

Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现

调用第二次:自定义返回内容

Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现

三、其他

 运行时更新速率限制

添加 ipratelimitcontroller控制器:

分布式部署时,需要将速率限制计算器和ip规则存储到分布式缓存中如redis

修改注入对象

添加nuget包  microsoft.extensions.caching.stackexchangeredis 

在startup中设置redis连接

限制时自定义相应结果:

调用时返回结果:

Asp.NET Core 限流控制(AspNetCoreRateLimit)的实现

其他:

示例代码:https://github.com/cwsheng/webapiversiondemo

到此这篇关于asp.net core 限流控制(aspnetcoreratelimit)的实现的文章就介绍到这了,更多相关asp.net core 限流控制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!