You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AspNetCoreRateLimit Nuget包中配置端点限流黑名单

AspNetCoreRateLimit 批量端点限流简化配置方案

AspNetCoreRateLimit 原生GeneralRules的Endpoint字段确实不支持数组传值,以下两种方案可以彻底解决配置冗余问题,无需修改库源码,兼容所有正式发布版本:

方案1:开启正则匹配,单条规则覆盖多端点(零代码改动)

库本身内置正则匹配规则支持,默认关闭,只要在配置中打开EnableRegexRuleMatching开关,就可以在Endpoint字段写正则表达式,一次性匹配多个无统一前缀的目标端点。
配置示例如下:

"IpRateLimiting": {
  "EnableEndpointRateLimiting": true,
  "StackBlockedRequests": true,
  "EnableRegexRuleMatching": true,
  "RealIpHeader": "X-Real-IP",
  "ClientIdHeader": "X-ClientId",
  "HttpStatusCode": 429,
  "IpWhitelist": [],
  "EndpointWhitelist": [],
  "ClientWhitelist": [],
  "GeneralRules": [
    {
      "Endpoint": "regex:(?i)^(get:/api/user/SearchByEmailOrPhone/.*|post:/api/auth/.*|get:/api/user/SetNewsletterSubscription/.*)$",
      "Period": "15s",
      "Limit": 3
    },
    {
      "Endpoint": "regex:(?i)^(get:/api/user/SearchByEmailOrPhone/.*|post:/api/auth/.*|get:/api/user/SetNewsletterSubscription/.*)$",
      "Period": "1m",
      "Limit": 6
    },
    {
      "Endpoint": "regex:(?i)^(get:/api/user/SearchByEmailOrPhone/.*|post:/api/auth/.*|get:/api/user/SetNewsletterSubscription/.*)$",
      "Period": "5m",
      "Limit": 13
    }
  ]
}

正则中(?i)表示忽略路径和请求方法的大小写,避免因为路由大小写差异导致规则失效。后续新增限流端点时,直接在正则的分组内追加对应路径格式即可,无需重复编写多份规则块。
如果待限流的端点有统一的路径前缀,甚至不需要写正则,直接用*通配符即可覆盖,比如所有需要限流的接口都在/api/public/路径下,直接写"Endpoint": "*:/api/public/*"就能匹配所有该路径下的接口。

方案2:启动时动态生成规则(适合大规模端点限流场景)

如果不想维护长正则表达式,可以在应用启动阶段通过代码定义限流端点分组和限流策略,自动批量生成所有规则注入配置,完全避免JSON配置冗余。
实现代码如下:

// 定义需要加入限流黑名单的端点列表
var limitedEndpoints = new[]
{
    "get:/api/user/SearchByEmailOrPhone/*",
    "post:/api/auth/*",
    "get:/api/user/SetNewsletterSubscription/*"
};
// 定义统一的限流周期与对应阈值
var limitPolicies = new[]
{
    (Period: "15s", Limit: 3),
    (Period: "1m", Limit: 6),
    (Period: "5m", Limit: 13)
};
// 批量生成所有限流规则
var rules = new List<RateLimitRule>();
foreach (var endpoint in limitedEndpoints)
{
    foreach (var policy in limitPolicies)
    {
        rules.Add(new RateLimitRule
        {
            Endpoint = endpoint,
            Period = policy.Period,
            Limit = policy.Limit
        });
    }
}
// 注入到限流配置
builder.Services.Configure<IpRateLimitOptions>(options =>
{
    // 此处赋值其他基础配置项,如RealIpHeader、HttpStatusCode等
    options.GeneralRules = rules;
});

这种方式维护成本极低,后续新增限流端点或者调整限流阈值,只需要修改对应的两个列表即可,哪怕有上百个端点需要限流,也不需要写重复配置。

注意:库内置的EndpointWhitelist仅用于配置放行端点,没有提供对应的批量黑名单配置项,不要尝试通过反向配置白名单实现黑名单逻辑,会导致其他未配置的接口全部被拦截。

内容的提问来源于stack exchange,提问作者bzmind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:21:13