用途
该技能用于在 ASP.NET Core(7+)中实现内置的限流中间件,以保护 API 免受滥用。它提供多种限流算法与策略配置模板,帮助开发者按需限制请求速率或并发量。
主要能力
支持四种限流算法:
- 固定窗口(Fixed Window):在固定时间间隔重置计数器,适合简单速率限制。
- 滑动窗口(Sliding Window):对固定窗口做平滑处理,通过分段加权平均实现更平滑的限流。
- 令牌桶(Token Bucket):允许突发流量,令牌随时间补充,突发上限为桶容量。
- 并发限制(Concurrency):限制同时处理的请求数量,用于保护资源,而非限制速率。
同时支持自定义拒绝响应(OnRejected),可设置 Retry-After 响应头并返回 JSON 错误体;支持按用户 ID 或订阅层级进行分区限流;支持将策略应用到 Minimal API 端点或控制器。
使用方式
在 Program.cs 中通过 builder.Services.AddRateLimiter 配置全局限流选项与各算法策略,例如 AddFixedWindowLimiter、AddSlidingWindowLimiter、AddTokenBucketLimiter、AddConcurrencyLimiter。中间件顺序上,限流应在认证之前:app.UseRateLimiter() 先于 app.UseAuthentication() 与 app.UseAuthorization()。
可通过策略类(如 RateLimitPolicies)定义策略名称,并在 RateLimitingConfiguration 中集中注册,配合 RateLimitSettings 与 appsettings.json 的 RateLimiting 节进行参数配置。
分区限流使用 options.AddPolicy 配合 RateLimitPartition,可按用户 ID 或订阅层级返回不同的限流器;未认证用户可按 IP 分区并采用更严格的限制。
应用到端点时,Minimal API 使用 .RequireRateLimiting(策略名),控制器使用 [EnableRateLimiting(策略名)];可用 .DisableRateLimiting() 对特定端点关闭限流。
适用场景
适用于需要保护 API 免受滥用、按用户或订阅层级差异化限流、对写操作施加更严格限制、对文件上传等资源密集型操作限制并发,以及为匿名用户设置更严格限制的 ASP.NET Core 项目。
限制
该技能基于 ASP.NET Core 7+ 的内置限流中间件。资料未提供关于分布式限流、跨节点共享计数、具体性能指标或收费信息,暂未提供。