Configurazione del middleware di limitazione della frequenza
Applichi limiti di frequenza per endpoint e policy.
Configurazione del middleware di limitazione della frequenza è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
AddRateLimiter
La configurazione inizia con AddRateLimiter nel contenitore dei servizi. Definisca una o più policy denominate e un codice di stato facoltativo per i rifiuti globali.
builder.Services.AddRateLimiter(options =>
{
options.RejectionStatusCode =
StatusCodes.Status429TooManyRequests;
});Una policy a finestra fissa
AddFixedWindowLimiter registra una policy denominata. Imposti il numero massimo di richieste consentite, la durata della finestra e il comportamento della coda.
options.AddFixedWindowLimiter("fixed", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
limiter.QueueLimit = 0;
});Una policy a finestra scorrevole
AddSlidingWindowLimiter aggiunge SegmentsPerWindow per controllare la granularità dello scorrimento.
options.AddSlidingWindowLimiter("sliding", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.SegmentsPerWindow = 6;
limiter.QueueLimit = 0;
});Una policy token bucket
AddTokenBucketLimiter imposta la capacità del bucket e la velocità di reintegro.
options.AddTokenBucketLimiter("token", limiter =>
{
limiter.TokenLimit = 100;
limiter.TokensPerPeriod = 20;
limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
limiter.QueueLimit = 0;
});Una policy di concorrenza
AddConcurrencyLimiter limita il numero di richieste simultanee.
options.AddConcurrencyLimiter("concurrent", limiter =>
{
limiter.PermitLimit = 5;
limiter.QueueLimit = 10;
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});Aggiunta del middleware
Attivi il rate limiting nella pipeline con UseRateLimiter. Lo posizioni subito dopo il routing.
var app = builder.Build();
app.UseRateLimiter();
app.MapControllers();RequireRateLimiting
Applichi una policy denominata agli endpoint con RequireRateLimiting per le Minimal API oppure con l'attributo [EnableRateLimiting] per i controller.
app.MapGet("/search", () => Results.Ok())
.RequireRateLimiting("token");
// Controller equivalent:
// [EnableRateLimiting("token")]Disabilitazione su endpoint specifici
Escluda un endpoint dal limitatore di un gruppo o da quello globale con DisableRateLimiting o [DisableRateLimiting].
app.MapGet("/health", () => Results.Ok())
.DisableRateLimiting();Un limitatore globale con partizioni
GlobalLimiter si applica a ogni richiesta. Usi PartitionedRateLimiter.Create per assegnare a ogni utente o indirizzo IP un contatore distinto.
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(
context =>
{
var key = context.User.Identity?.Name
?? context.Connection.RemoteIpAddress?.ToString()
?? "anon";
return RateLimitPartition.GetFixedWindowLimiter(key, _ =>
new FixedWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromMinutes(1)
});
});Personalizzazione del rifiuto
OnRejected consente di aggiungere un header Retry-After o un messaggio descrittivo quando una richiesta supera il limite.
options.OnRejected = async (context, token) =>
{
if (context.Lease.TryGetMetadata(
MetadataName.RetryAfter, out var retry))
context.HttpContext.Response.Headers.RetryAfter =
((int)retry.TotalSeconds).ToString();
await context.HttpContext.Response
.WriteAsync("Rate limit exceeded.", token);
};Applicazione a un gruppo di route
Associ una policy a un intero gruppo di route, così ogni endpoint al suo interno condivide lo stesso limite.
var api = app.MapGroup("/api")
.RequireRateLimiting("fixed");
api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());Verifica rapida
Verifichi la configurazione del middleware.
Riepilogo
Ha configurato il rate limiting:
AddRateLimiterdefinisce policy a finestra fissa, finestra scorrevole, token bucket e di concorrenza.UseRateLimiterattiva il middleware;RequireRateLimitingapplica una policy.GlobalLimiterconPartitionedRateLimiterfornisce contatori distinti per client.OnRejectedpersonalizza la risposta 429.
Prossimo argomento: caching dell'output.
Domande Frequenti
La lezione «Configurazione del middleware di limitazione della frequenza» è gratuita?
Sì — il testo completo di «Configurazione del middleware di limitazione della frequenza» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Configurazione del middleware di limitazione della frequenza»?
Applichi limiti di frequenza per endpoint e policy. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Configurazione del middleware di limitazione della frequenza»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Algoritmi di limitazione della frequenza
- Configurazione del middleware di limitazione della frequenza
- Nozioni di base sull'output caching
- Policy e invalidazione della cache