【发布时间】:2020-08-29 18:30:58
【问题描述】:
我正在使用 AspNetCoreRateLimit 库和 Asp.Net Core 2.2 web api。我已将 IpRateLimiting 与Startup.cs 中的默认设置一起使用,如AspNetCoreRateLimit wiki 所示。
我有带有查询参数的 API 端点,它与 http GET 查询一起使用,如下所示(参见参数 startDate 和 stopDate):
GET "https://host/api/endpoint/path?startDate=2020-04-04&stopDate=2020-04-04"
我只想将 唯一 个请求(具有唯一参数组合)限制为每小时 5 个请求。因此,例如,以下场景应该可以在 1 小时内完成:
5 times: GET "https://host/api/endpoint/path?startDate=2020-04-04&stopDate=2020-04-04"
5 times: GET "https://host/api/endpoint/path?startDate=2020-04-05&stopDate=2020-04-05"
问题是无论参数如何,我每小时只能发送 total 5 个请求。
以下是来自 appsettings.json 的 IpRateLimiting 设置。
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIPHeader": "X-Real-IP",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*:/api/endpoint/path",
"Period": "1h",
"Limit": 5
}
]
}
请注意,我不想更改 @Yongqing Yu 在this 中提出的端点路由,因为有很多 API 客户端使用我的 API而且我不想引入任何重大更改。
【问题讨论】:
-
可能你需要一个自定义解析器,看看这里:github.com/stefanprodan/AspNetCoreRateLimit/wiki/…
-
@alessandro 我会试试这个..
-
@alessandro 这行得通,我把它作为完整的答案..
标签: c# asp.net-core throttling rate-limiting