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次后就会返回错误提示,超出了限制次数。

参考文献:
1\]https://github.com/stefanprodan/AspNetCoreRateLimit