不使用 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();
我使用的是 AspNetCoreRateLimit 版本 4.0.1,并且我已经在 .net core 6 web 中完成了所有设置 api。当我通过邮递员发送呼叫时,我可以看到速率限制正在工作。
但是,当我添加具有特定 IP 地址的 IpRateLimitPolicies 时,设置不会被应用。
我使用邮递员,这次在代理中我将 ip 地址添加到 127.0.0.1。当我使用 Request.HttpContext.Connection.RemoteIpAddress;
我在 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();