Program.cs
· 837 B · C#
Raw
// Existing services ...
builder.Services.AddRateLimiter(options =>
{
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(httpContext =>
RateLimitPartition.GetFixedWindowLimiter(
partitionKey: httpContext.User.Identity?.Name ?? httpContext.Request.Headers.Host.ToString(),
factory: partition => new FixedWindowRateLimiterOptions
{
AutoReplenishment = true,
PermitLimit = Convert.ToInt32(builder.Configuration["RateLimit:Limit"]),
QueueLimit = 0,
Window = TimeSpan.FromMinutes(Convert.ToDouble(builder.Configuration["RateLimit:WindowInMinutes"])),
}));
options.RejectionStatusCode = Convert.ToInt32(builder.Configuration["RateLimit:HttpStatusCode"]);
});
// existing configuration of HTTP request pipeline...
app.UseRouting();
app.UseRateLimiter();
| 1 | // Existing services ... |
| 2 | |
| 3 | builder.Services.AddRateLimiter(options => |
| 4 | { |
| 5 | options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(httpContext => |
| 6 | RateLimitPartition.GetFixedWindowLimiter( |
| 7 | partitionKey: httpContext.User.Identity?.Name ?? httpContext.Request.Headers.Host.ToString(), |
| 8 | factory: partition => new FixedWindowRateLimiterOptions |
| 9 | { |
| 10 | AutoReplenishment = true, |
| 11 | PermitLimit = Convert.ToInt32(builder.Configuration["RateLimit:Limit"]), |
| 12 | QueueLimit = 0, |
| 13 | Window = TimeSpan.FromMinutes(Convert.ToDouble(builder.Configuration["RateLimit:WindowInMinutes"])), |
| 14 | })); |
| 15 | options.RejectionStatusCode = Convert.ToInt32(builder.Configuration["RateLimit:HttpStatusCode"]); |
| 16 | }); |
| 17 | |
| 18 | // existing configuration of HTTP request pipeline... |
| 19 | |
| 20 | app.UseRouting(); |
| 21 | app.UseRateLimiter(); |
appsettings.json
· 94 B · Binary
Raw
This file can't be rendered. View the full file.