学习C#调用AspNetCoreRateLimit包限制客户端访问次数(1:基本用法)

  AspNetCoreRateLimit是专为 ASP.NET Core设计的限速模块,支持按IP地址或客户端ID控制客户端向Web API接口或MVC应用程序发起请求的速率。该模块包含IpRateLimitMiddleware和ClientRateLimitMiddleware中间件,通过中间件可以设置多类限制,如限制特定IP或客户端在特定时间间隔(如每秒或每15分钟等)内的最大调用次数。既能针对所有 API 请求统一设置限制,也可以将限制细化到单个API地址或HTTP路径。本文学习调用AspNetCoreRateLimit包按IP地址限制客户端访问次数的基本用法。
  VS2022新建WebApi项目,在Nuget包管理器中搜索并安装AspNetCoreRateLimit包。
  主要是在program.cs文件中注册并启用IP限制中间件,并在appsettings.json文件中设置ip限制策略,本文中设置所有接口30秒内只能调用2次。代码及设置如下所示:

csharp 复制代码
//program.cs文件的注册服务部分添加下面的代码
builder.Services.AddOptions();
builder.Services.AddMemoryCache();
builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"));
builder.Services.Configure<IpRateLimitPolicies>(builder.Configuration.GetSection("IpRateLimitPolicies"));
builder.Services.AddInMemoryRateLimiting();
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();

//program.cs文件的启用服务部分添加以下代码
app.UseIpRateLimiting();

//appsettings.json文件中添加以下设置
"IpRateLimiting": {
  "EnableEndpointRateLimiting": false,   
  "StackBlockedRequests": false,
  "RealIpHeader": "X-Real-IP",
  "ClientIdHeader": "X-ClientId",
  "HttpStatusCode": 429,
  "IpWhitelist": [  ],
  "EndpointWhitelist": [ ],
  "ClientWhitelist": [  ],  
  "GeneralRules": [
    {
      "Endpoint": "*",
      "Period": "30s",
      "Limit": 2
    }
  ]
}

  最后是接口调用效果,如下图所示,连续点击超过2次后就会返回错误提示,超出了限制次数。

参考文献:

1https://github.com/stefanprodan/AspNetCoreRateLimit

相关推荐
我不是疯子是傻子10 小时前
Qt 实时曲线卡顿优化:从QPainter到OpenGL的3级加速实战
开发语言·qt
zlinear数据采集卡10 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
nnerddboy11 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
jerryinwuhan11 小时前
《Python数据预处理》第四章
开发语言·python
长江&后浪11 小时前
防火墙的描述
开发语言·网络·php
观无11 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)11 小时前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
我不是疯子是傻子12 小时前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆12 小时前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
霸道流氓气质12 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式