SuperAPI AI 工具集

dotnet-rate-limiting

安全与审计

查看项目

更新于 10-16 02:22

技能介绍

用途

该技能用于在 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+ 的内置限流中间件。资料未提供关于分布式限流、跨节点共享计数、具体性能指标或收费信息,暂未提供。