.NET 6中ASP.NET Core RateLimit不生效问题排查
问题排查与解决
1. 未注册限流中间件
你仅在Program.cs中配置了限流服务,但未将限流中间件加入请求管道,这是核心问题。需在Program.cs的app构建段添加:
// 注意顺序:需放在UseRouting之后,UseAuthorization/UseEndpoints之前 app.UseIpRateLimiting();
2. 限流规则的Endpoint路径不匹配
你的控制器路由为[Route("api/[controller]")],接口实际路径是/api/SuperAdmin/Add,但appsettings.json中配置的Endpoint是*:/SuperAdmin/*,与实际路径不匹配。修改规则中的Endpoint:
"GeneralRules": [ { "Endpoint": "*:/api/SuperAdmin/*", "Period": "5s", "Limit": 2 } ]
3. 缺少HttpContextAccessor服务
AspNetCoreRateLimit依赖IHttpContextAccessor获取请求上下文,需在Program.cs的服务配置中添加:
builder.Services.AddHttpContextAccessor();
4. 确认中间件顺序正确
完整的Program.cs请求管道配置顺序示例:
var app = builder.Build(); app.UseHttpsRedirection(); app.UseRouting(); // 限流中间件必须在此位置 app.UseIpRateLimiting(); app.UseAuthorization(); app.MapControllers(); app.Run();
5. 验证NuGet包安装
确认已正确安装AspNetCoreRateLimit NuGet包,版本需与你的.NET版本兼容(如.NET 6+对应最新稳定版)。
按上述步骤调整后重启服务,再次测试5秒内多次调用接口,即可触发429限流响应。
内容的提问来源于stack exchange,提问作者mathdx
相关产品推荐
相关产品推荐

