0Pricing
C# Academy · Lezione

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:

  • AddRateLimiter definisce policy a finestra fissa, finestra scorrevole, token bucket e di concorrenza.
  • UseRateLimiter attiva il middleware; RequireRateLimiting applica una policy.
  • GlobalLimiter con PartitionedRateLimiter fornisce contatori distinti per client.
  • OnRejected personalizza 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

  1. Algoritmi di limitazione della frequenza
  2. Configurazione del middleware di limitazione della frequenza
  3. Nozioni di base sull'output caching
  4. Policy e invalidazione della cache
← Torna a C# Academy