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;
});