AspNetCoreRateLimit 是一个流行的 ASP.NET Core 限流中间件,用于控制对 API 的访问频率,以防止资源耗尽或过度使用。该框架的作者是stefanprodan,项目nuget地址是https://github.com/stefanprodan/AspNetCoreRateLimit。
以下是一个详细的 AspNetCoreRateLimit 使用教程:
一、准备工作
- 确保项目支持 ASP.NET Core:
- 你的项目需要基于 ASP.NET Core 框架。
- 安装 NuGet 包:
- 打开你的项目,在 NuGet 包管理器中搜索
AspNetCoreRateLimit
并安装。 - 或者使用命令行工具(如 dotnet CLI)安装:
- 打开你的项目,在 NuGet 包管理器中搜索
dotnet add package AspNetCoreRateLimit
二、配置 AspNetCoreRateLimit
-
配置 appsettings.json:
- 在你的
appsettings.json
文件中添加 AspNetCoreRateLimit 的配置部分。这包括全局限流策略和特定端点的限流策略。
- 在你的
{
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIpHeader": "X-Forwarded-For",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*",
"Period": "1m",
"Limit": 100
}
]
},
"IpRateLimitPolicies": {
"IpRules": [
{
"Ip": "192.168.1.1",
"Rules": [
{
"Endpoint": "*",
"Period": "15m",
"Limit": 100
}
]
}
]
}
}
- EnableEndpointRateLimiting:是否启用对端点的限流。
- StackBlockedRequests:是否将被阻止的请求计入计数器。
- RealIpHeader:用于提取真实 IP 的 HTTP 头,适用于反向代理场景。
- GeneralRules:全局限流规则。
- IpRateLimitPolicies:特定 IP 的限流规则。
注册服务和中间件:
- 在你的
Startup.cs
文件中,注册 AspNetCoreRateLimit 服务和中间件。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// 添加内存缓存
services.AddMemoryCache();
// 配置和注册 IP 限流
services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
// 注入客户端策略存储和计数器存储
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
// 如果需要其他存储(如 Redis),请相应替换
// 添加限流中间件
services.AddRateLimiting();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ... 其他配置 ...
// 使用限流中间件
app.UseIpRateLimiting();
// ... 其他中间件 ...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
三、测试限流
- 发送请求:
- 使用 Postman、Curl 或其他 HTTP 客户端工具向你的 API 发送请求。
- 观察在达到限流阈值后,是否收到 429 状态码(Too Many Requests)。
- 调整配置:
- 根据你的需求调整
appsettings.json
中的限流策略。 - 重新运行应用并测试新的限流设置。
- 根据你的需求调整
四、注意事项
- 内存与性能:使用内存缓存时,请确保你的应用有足够的内存来处理高并发请求。
- 持久化存储:对于生产环境,建议使用 Redis 等持久化存储来存储限流数据和计数器,以提高性能和可靠性。
- 安全性:确保你的 API 密钥、IP 地址等敏感信息得到妥善保护。
- 监控与日志:实现适当的监控和日志记录,以便在出现问题时能够快速定位和解决问题。
通过以上步骤,你应该能够成功地在你的 ASP.NET Core 应用中集成 AspNetCoreRateLimit 限流中间件,并有效地控制对 API 的访问频率。