不使用 AspNetCoreRateLimit 应用速率限制策略设置

Rate limit policy settings is not applied using AspNetCoreRateLimit

我使用的是 AspNetCoreRateLimit 版本 4.0.1,并且我已经在 .net core 6 web 中完成了所有设置 api。当我通过邮递员发送呼叫时,我可以看到速率限制正在工作。

但是,当我添加具有特定 IP 地址的 IpRateLimitPolicies 时,设置不会被应用。 我使用邮递员,这次在代理中我将 ip 地址添加到 127.0.0.1。当我使用 Request.HttpContext.Connection.RemoteIpAddress;

时,我可以看到命中 api 的 ip 设置正确

我在 program.cs 中注册如下:

    _serviceCollection.AddOptions();
    _serviceCollection.AddMemoryCache();
    _serviceCollection.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"));
     _serviceCollection.Configure<IpRateLimitPolicies>(builder.Configuration.GetSection("IpRateLimitPolicies"));
     _serviceCollection.AddInMemoryRateLimiting();
     _serviceCollection.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
     _serviceCollection.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
     _serviceCollection.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
     _serviceCollection.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();

还补充说: app.UseIpRateLimiting();

我的应用程序设置也如下所示:

 {
  "IpRateLimiting": {
    "EnableEndpointRateLimiting": false,
    "StackBlockedRequests": false,
    "RealIPHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "IpWhitelist": [ ],
    "EndpointWhitelist": [],
    "ClientWhitelist": [],
    "HttpStatusCode": 429,
    "GeneralRules": [
      {
        "Endpoint": "*",
        "Period": "10s",
        "Limit": 1
      }
    ]
  },
  "IpRateLimitPolicies": {
    "IpRules": [
      {
        "Ip": "127.0.0.1",
        "Rules": [
          {
            "Endpoint": "*",
            "Period": "20s",
            "Limit": 2
          }
        ]
      }
    ]
  }

但显然 IpRateLimitPolicies 下的设置不会应用。

不知道我是不是漏掉了什么?

谢谢

经过测试,我认为AspNetCoreRateLimit 包在.net5 和.net6 中不兼容。也许.net core3.1版本会更稳定

您可以在 github 上提交问题。

显然我在 program.cs 或 startup.cs 中遗漏了一些配置: https://github.com/stefanprodan/AspNetCoreRateLimit/issues/305

由于我们使用的是启动,所以我在配置方法中添加了以下内容

var ipPolicyStore = app.ApplicationServices.GetRequiredService(); ipPolicyStore.SeedAsync().GetAwaiter().GetResult();