C# Academy · leksjon

Konfigurere middleware for hastighetsbegrensning

Bruk hastighetsbegrensninger per endepunkt og policy.

Leksjon 2 av 413 trinn

Konfigurere middleware for hastighetsbegrensning er en gratis leksjon i C# Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C# Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C# Academy inneholder totalt 4 leksjoner.

AddRateLimiter

Konfigurasjonen starter med AddRateLimiter i tjenestebeholderen. De definerer én eller flere navngitte policyer og eventuelt en global statuskode for avvisning.

builder.Services.AddRateLimiter(options =>
{
    options.RejectionStatusCode =
        StatusCodes.Status429TooManyRequests;
});

En policy for fast vindu

AddFixedWindowLimiter registrerer en navngitt policy. Angi tillatelsesgrensen, vinduets lengde og køadferden.

options.AddFixedWindowLimiter("fixed", limiter =>
{
    limiter.PermitLimit = 100;
    limiter.Window = TimeSpan.FromMinutes(1);
    limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
    limiter.QueueLimit = 0;
});

En policy for glidende vindu

AddSlidingWindowLimiter legger til SegmentsPerWindow for å styre hvor finmasket utjevningen skal være.

options.AddSlidingWindowLimiter("sliding", limiter =>
{
    limiter.PermitLimit = 100;
    limiter.Window = TimeSpan.FromMinutes(1);
    limiter.SegmentsPerWindow = 6;
    limiter.QueueLimit = 0;
});

En policy for token bucket

AddTokenBucketLimiter angir beholderens størrelse og påfyllingshastigheten.

options.AddTokenBucketLimiter("token", limiter =>
{
    limiter.TokenLimit = 100;
    limiter.TokensPerPeriod = 20;
    limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
    limiter.QueueLimit = 0;
});

En policy for samtidighet

AddConcurrencyLimiter begrenser samtidige forespørsler.

options.AddConcurrencyLimiter("concurrent", limiter =>
{
    limiter.PermitLimit = 5;
    limiter.QueueLimit = 10;
    limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});

Legge til middlewaren

Aktiver hastighetsbegrensning i pipelinen med UseRateLimiter. Plasser den tidlig, etter ruting.

var app = builder.Build();

app.UseRateLimiter();

app.MapControllers();

RequireRateLimiting

Bruk en navngitt policy på endepunkter med RequireRateLimiting (minimal-API) eller attributtet [EnableRateLimiting] (kontrollere).

app.MapGet("/search", () => Results.Ok())
   .RequireRateLimiting("token");

// Controller equivalent:
// [EnableRateLimiting("token")]

Deaktivere på bestemte endepunkter

Unnta et endepunkt fra en gruppebegrensning eller global begrensning med DisableRateLimiting eller [DisableRateLimiting].

app.MapGet("/health", () => Results.Ok())
   .DisableRateLimiting();

En global begrenser med partisjoner

GlobalLimiter gjelder for alle forespørsler. Bruk PartitionedRateLimiter.Create for å gi hver bruker eller IP-adresse sin egen teller.

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

Tilpasse avvisningen

OnRejected lar Dem legge til en Retry-After-header eller en brukervennlig melding når en forespørsel strupes.

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

Bruke på en rutegruppe

Knytt en policy til en hel rutegruppe slik at hvert endepunkt i gruppen deler den samme grensen.

var api = app.MapGroup("/api")
             .RequireRateLimiting("fixed");

api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());

Rask kontroll

Bekreft oppsettet av middlewaren.

Oppsummering

De konfigurerte hastighetsbegrensning:

  • AddRateLimiter definerer policyer for fast vindu, glidende vindu, token bucket og samtidighet.
  • UseRateLimiter aktiverer middlewaren, mens RequireRateLimiting bruker en policy.
  • GlobalLimiter med PartitionedRateLimiter gir tellere per klient.
  • OnRejected tilpasser 429-svaret.

Neste trinn: output caching.

Gratis å komme i gang

Lær deg C# med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
93
Leksjoner
346

Ofte stilte spørsmål

Er leksjonen «Konfigurere middleware for hastighetsbegrensning» gratis?

Ja – hele teksten i «Konfigurere middleware for hastighetsbegrensning» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C# Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C# Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Konfigurere middleware for hastighetsbegrensning»?

Bruk hastighetsbegrensninger per endepunkt og policy. Du øver på C# Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C# Academy?

Ingen tidligere erfaring er nødvendig. C# Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Konfigurere middleware for hastighetsbegrensning»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C# Academy-leksjonen?

Ja. Alle C# Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Algoritmer for hastighetsbegrensning
  2. Konfigurere middleware for hastighetsbegrensning
  3. Grunnleggende output-caching
  4. Bufringspolicyer og ugyldiggjøring
← Tilbake til C# Academy