【问题标题】:How to specify wildcards for api paths in AspNetCoreRateLimit configuration?如何在 AspNetCoreRateLimit 配置中为 api 路径指定通配符?
【发布时间】:2021-01-16 18:46:33
【问题描述】:

我在 .net core 3 web api 应用程序中使用 AspNetCoreRateLimit。我希望有一种方法可以在路径中使用通配符来将与路径匹配的所有请求限制为某个数字。 这是我在 appsettings 中的(不正确的)配置:

  "ClientRateLimiting": {
    "EnableEndpointRateLimiting": true,
    "StackBlockedRequests": false,
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "QuotaExceededMessage": "System is busy, please try again later",
    "GeneralRules": [
      {
        "Endpoint": "get:/api/*",
        "Period": "10s",
        "Limit": 3
      },
    ]
  }

不幸的是,通过上述配置,每个匹配端点模式的唯一 url 都可以在 10 秒内执行 3 次。例如,api/test/foo、api/test1/foo 和 api/test2/foo 将被允许在 10 秒内并发执行 3 次 - 即每 10 秒总共有 9 个请求。

有没有办法配置限制器以将与模式匹配的所有请求限制为单个数字?也就是说,我想确保只有 3 个匹配模式的请求可以在 10 秒内执行。

【问题讨论】:

  • 您找到解决方法了吗?我也在寻找这个问题的答案。

标签: c# asp.net-core throttling rate-limiting


【解决方案1】:

我没用过这个库,但是看文档,你有这句话。

如果 EnableEndpointRateLimiting 设置为 false,则限制将 全局应用,只有端点 * 的规则才会应用。 例如,如果您将限制设置为每秒 5 次调用,则任何 HTTP 调用 任何端点都将计入该限制。 source

所以,你的代码变成了这样。

  "ClientRateLimiting": {
    "EnableEndpointRateLimiting": false,
    "StackBlockedRequests": false,
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "QuotaExceededMessage": "System is busy, please try again later",
    "GeneralRules": [
      {
        "Endpoint": "*",
        "Period": "10s",
        "Limit": 3
      },
    ]
  }

强调这两行。

    "EnableEndpointRateLimiting": false,
    "Endpoint": "*",

当然,要完成这项工作,您必须有一个单独的 API 服务,也许是一个微服务,它只包含您希望应用此特定规则的 API 端点组。

我建议这不是最终解决方案,而是可能的解决方案,因为如果您已与此特定软件包结婚,它当前不支持(我再次查看文档以确定)您正在寻找的方案.

【讨论】:

  • 您的建议不起作用,因为如果 EnableEndpointRageLimiting 设置为 true,则 Endpoint 必须设置为 *。这在您引用的文档中明确说明。当我最初查看该库时,我还假设“只有作为端点 * 的规则”适用于包含 *.但是,规则必须是 "Endpoint": " * " - 即不能包含任何部分路径。
  • 是的,我已经根据您指出的内容更新了我的答案。恐怕,这是您可能不喜欢的另一种解决方案,但是,如果我是您处于类似情况并且我必须做这样的事情,只使用这个包裹,那么,我会沿着这条路走
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2018-12-10
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2020-09-18
  • 2021-02-01
相关资源
最近更新 更多