Rate Limiting in ASP.NET Core
Program.cs
var builder = WebApplication.CreateBuilder(args);
// Configure rate limiter
builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("Fixed", opt =>
{
opt.PermitLimit = 10; // Maximum 10 requests
opt.Window = TimeSpan.FromMinutes(1); // In a 1-minute window
});
});
Rate-Limiting Strategies
Fixed Window
Limits requests in fixed time intervals.
options.AddFixedWindowLimiter("Fixed", opt =>
{
opt.PermitLimit = 5;
opt.Window = TimeSpan.FromSeconds(30);
});
Sliding Window
Adjusts limits dynamically based on the sliding window.
options.AddSlidingWindowLimiter("Sliding", opt =>
{
opt.PermitLimit = 10;
opt.Window = TimeSpan.FromMinutes(1);
opt.SegmentsPerWindow = 4;
});
Concurrency Limiting
Restricts the number of concurrent requests.
options.AddConcurrencyLimiter("Concurrent", opt =>
{
opt.PermitLimit = 5; // Maximum concurrent requests
});
Token Bucket
Uses tokens to track available requests.
options.AddTokenBucketLimiter("TokenBucket", opt =>
{
opt.TokenLimit = 10;
opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
opt.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
opt.TokensPerPeriod = 1;
opt.QueueLimit = 5;
});