gpt4 book ai didi

c# - AspNetCoreRateLimit 匹配规则时不使用查询参数

转载 作者:行者123 更新时间:2023-12-04 00:56:48 26 4
gpt4 key购买 nike

我正在使用 AspNetCoreRateLimit带有 Asp.Net Core 2.2 web api 的库。我已将 IpRateLimiting 与它在 Startup.cs 中的默认设置一起使用。如所见 AspNetCoreRateLimit wiki .

我有带有查询参数的 API 端点,它与 http GET 查询一起使用,如下所示(参见参数 startDatestopDate):

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"

问题是我只能发送 总计 无论参数如何,每小时 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
}
]
}

请注意,我不想更改 this 中建议的端点路由@Yongqing Yu 的好答案,因为有很多 API 客户端在使用我的 API,我不想引入任何重大更改。

最佳答案

您可以 change the route对应的 Action ,直接把参数变成路径的一部分,如'https://host/api/endpoint/path/2020-04-04/2020-04-04' ,使 EndpointGeneralRules可以通过*满足您的条件.

您可以引用this .

这是我的演示:

[Route("api/[controller]")]
[ApiController]
public class DefaultController : ControllerBase
{
[HttpGet("Test/{startDate}/{stopDate}")]
public string Test(string startDate, string stopDate)
{
return "Ok";
}
}

appsettings.json:
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIPHeader": "X-Real-IP",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*:/api/default/Test/*",
"Period": "1h",
"Limit": 5
}
]
}

这是测试结果:

enter image description here

关于c# - AspNetCoreRateLimit 匹配规则时不使用查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61776755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com