C# Academy · Oppitunti

Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen

Soveltakaa nopeusrajoituksia päätepiste- ja käytäntökohtaisesti.

Oppitunti 2/413 vaihetta

Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

AddRateLimiter

Määritys alkaa palvelusäilöön lisättävästä komennosta AddRateLimiter. Määritä yksi tai useampi nimetty käytäntö sekä valinnainen yleinen hylkäyksen tilakoodi.

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

Kiinteän aikaikkunan käytäntö

AddFixedWindowLimiter rekisteröi nimetyn käytännön. Määritä sallittujen pyyntöjen määrä, ajanjakson pituus ja jonon toiminta.

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

Liukuvan aikaikkunan käytäntö

AddSlidingWindowLimiter lisää asetuksen SegmentsPerWindow, jolla määritetään tasoituksen tarkkuus.

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

Poletinsäiliökäytäntö

AddTokenBucketLimiter määrittää säiliön koon ja täydennysnopeuden.

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

Samanaikaisuuskäytäntö

AddConcurrencyLimiter rajoittaa samanaikaisten pyyntöjen määrää.

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

Middlewaren lisääminen

Ota nopeusrajoitus käyttöön käsittelyputkessa komennolla UseRateLimiter. Sijoita se reitityksen jälkeen mahdollisimman alkuun.

var app = builder.Build();

app.UseRateLimiter();

app.MapControllers();

RequireRateLimiting

Liitä nimetty käytäntö päätepisteisiin komennolla RequireRateLimiting (Minimal API) tai ohjainten [EnableRateLimiting]-attribuutilla.

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

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

Poistaminen käytöstä tietyissä päätepisteissä

Vapauta päätepiste ryhmä- tai yleisestä rajoituksesta komennolla DisableRateLimiting tai attribuutilla [DisableRateLimiting].

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

Yleinen rajoitin osioilla

GlobalLimiter koskee jokaista pyyntöä. Käytä komentoa PartitionedRateLimiter.Create, jotta jokaisella käyttäjällä tai IP-osoitteella on oma laskurinsa.

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

Hylkäyksen mukauttaminen

OnRejected-toiminnon avulla voit lisätä Retry-After-otsakkeen tai selkeän vastaustekstin, kun pyyntöä rajoitetaan.

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

Soveltaminen reittiryhmään

Liitä käytäntö koko reittiryhmään, jolloin kaikki sen sisältämät päätepisteet käyttävät samaa rajoitusta.

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

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

Pikatarkistus

Varmista, että middlewaren määritys on oikein.

Kertaus

Määritit nopeusrajoituksen:

  • AddRateLimiter määrittää kiinteän aikaikkunan, liukuvan aikaikkunan, poletinsäiliön ja samanaikaisuuden käytännöt.
  • UseRateLimiter ottaa middlewaren käyttöön ja RequireRateLimiting soveltaa käytäntöä.
  • GlobalLimiter ja PartitionedRateLimiter luovat asiakaskohtaiset laskurit.
  • OnRejected mukauttaa 429-vastauksen.

Seuraavaksi: tulosteiden välimuistitus.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen” ilmainen?

Kyllä – oppitunnin ”Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen”?

Soveltakaa nopeusrajoituksia päätepiste- ja käytäntökohtaisesti. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Nopeudenrajoituksen algoritmit
  2. Nopeudenrajoitusmiddleware-ohjelmiston määrittäminen
  3. Tulosteiden välimuistin perusteet
  4. Välimuistikäytännöt ja mitätöinti
← Takaisin: C# Academy