速率限制#
安装AspNetCoreRateLimit包#
二选一即可
命令行#
dotnet add package AspNetCoreRateLimit
Nuget包管理器#
Install-Package AspNetCoreRateLimit
配置appsettings.json#
{
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIpHeader": "X-Real-IP",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*",
"Period": "2s",
"Limit": 5
}
]
}
}
在Program.cs配置#
// ... other code
builder.Services.AddMemoryCache();
builder.AddRateLimitServices();
// ... other code
app.UseIpRateLimiting();
创建AddRateLimitServices类#
using AspNetCoreRateLimit;
namespace Learn.WebAPI.StartupConfig;
public static class ServicesConfig
{
public static void AddRateLimitServices(this WebApplicationBuilder builder)
{
builder.Services.Configure<IpRateLimitOptions>(
builder.Configuration.GetSection("IpRateLimiting"));
builder.Services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
builder.Services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
builder.Services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
builder.Services.AddInMemoryRateLimiting();
}
}
News控制器使用#
[HttpGet]
public string Get()
{
return "News";
}