以下是一个详细的 AspNetCoreRateLimit 使用教程:
dotnet add package 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
}
]
}
]
}
}
注册服务和中间件:
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();
});
}
appsettings.json
中的限流策略。通过以上步骤,你应该能够成功地在你的 ASP.NET Core 应用中集成 AspNetCoreRateLimit 限流中间件,并有效地控制对 API 的访问频率。