Rate limiting — built-in request throttling middleware.
Algorithms:
Setup:
1builder.Services.AddRateLimiter(options =>2{3 options.OnRejected = (context, ct) =>4 {5 context.HttpContext.Response.StatusCode = 429;6 return ValueTask.CompletedTask;7 };89 options.AddFixedWindowLimiter("fixed", opt =>10 {11 opt.Window = TimeSpan.FromSeconds(10);12 opt.PermitLimit = 100;13 opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;14 opt.QueueLimit = 10;15 });16});1718app.UseRateLimiter();
Custom partitioning:
1var partition = RateLimitPartition.GetTokenBucketLimiter(2 partitionKey: context.User.Identity?.Name ?? "anonymous",3 factory: _ => new TokenBucketRateLimiterOptions4 {5 TokenLimit = 10,6 ReplenishmentPeriod = TimeSpan.FromSeconds(1)7 });