Konfigurere middleware for hastighetsbegrensning
Bruk hastighetsbegrensninger per endepunkt og policy.
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:
AddRateLimiterdefinerer policyer for fast vindu, glidende vindu, token bucket og samtidighet.UseRateLimiteraktiverer middlewaren, mensRequireRateLimitingbruker en policy.GlobalLimitermedPartitionedRateLimitergir tellere per klient.OnRejectedtilpasser 429-svaret.
Neste trinn: output caching.
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
- Algoritmer for hastighetsbegrensning
- Konfigurere middleware for hastighetsbegrensning
- Grunnleggende output-caching
- Bufringspolicyer og ugyldiggjøring