0Pricing
C# Academy · Lektion

Rate-Limiting-Middleware konfigurieren

Wenden Sie Ratenbegrenzungen pro Endpunkt und Richtlinie an.

Rate-Limiting-Middleware konfigurieren ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

AddRateLimiter

Die Konfiguration beginnt mit AddRateLimiter im Dienstcontainer. Sie definieren eine oder mehrere benannte Richtlinien sowie optional einen globalen Statuscode für abgelehnte Anfragen.

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

Eine Richtlinie für ein festes Zeitfenster

AddFixedWindowLimiter registriert eine benannte Richtlinie. Legen Sie das Anfragelimit, die Länge des Zeitfensters und das Verhalten der Warteschlange fest.

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

Eine Richtlinie für ein gleitendes Zeitfenster

AddSlidingWindowLimiter fügt SegmentsPerWindow hinzu, um die Granularität der Glättung zu steuern.

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

Eine Token-Bucket-Richtlinie

AddTokenBucketLimiter legt die Bucket-Größe und die Auffüllrate fest.

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

Eine Parallelitätsrichtlinie

AddConcurrencyLimiter begrenzt die Anzahl gleichzeitig bearbeiteter Anfragen.

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

Die Middleware hinzufügen

Aktivieren Sie Rate Limiting in der Pipeline mit UseRateLimiter. Platzieren Sie die Middleware frühzeitig nach dem Routing.

var app = builder.Build();

app.UseRateLimiter();

app.MapControllers();

RequireRateLimiting

Wenden Sie eine benannte Richtlinie mit RequireRateLimiting auf Endpunkte an (minimale API) oder verwenden Sie bei Controllern das Attribut [EnableRateLimiting].

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

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

Bestimmte Endpunkte ausnehmen

Nehmen Sie einen Endpunkt mit DisableRateLimiting oder [DisableRateLimiting] von einem Gruppen- oder globalen Begrenzer aus.

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

Ein globaler Begrenzer mit Partitionen

GlobalLimiter gilt für jede Anfrage. Verwenden Sie PartitionedRateLimiter.Create, um jedem Benutzer oder jeder IP-Adresse einen eigenen Zähler zu geben.

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

Die Ablehnung anpassen

Mit OnRejected können Sie einen Retry-After-Header oder einen verständlichen Antworttext hinzufügen, wenn eine Anfrage gedrosselt wird.

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

Auf eine Routengruppe anwenden

Weisen Sie einer ganzen Routengruppe eine Richtlinie zu, damit jeder darin enthaltene Endpunkt dasselbe Limit verwendet.

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

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

Kurzprüfung

Bestätigen Sie die Einrichtung der Middleware.

Zusammenfassung

Sie haben Rate Limiting konfiguriert:

  • AddRateLimiter definiert Richtlinien für feste und gleitende Zeitfenster, Token-Buckets und Parallelität.
  • UseRateLimiter aktiviert die Middleware; RequireRateLimiting wendet eine Richtlinie an.
  • GlobalLimiter mit PartitionedRateLimiter stellt Zähler pro Client bereit.
  • OnRejected passt die 429-Antwort an.

Als Nächstes: Output Caching.

Häufig gestellte Fragen

Ist die Lektion „Rate-Limiting-Middleware konfigurieren“ kostenlos?

Ja — der vollständige Text von „Rate-Limiting-Middleware konfigurieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Rate-Limiting-Middleware konfigurieren“?

Wenden Sie Ratenbegrenzungen pro Endpunkt und Richtlinie an. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Rate-Limiting-Middleware konfigurieren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Algorithmen zur Ratenbegrenzung
  2. Rate-Limiting-Middleware konfigurieren
  3. Grundlagen des Output-Caching
  4. Cache-Richtlinien und Invalidierung
← Zurück zu C# Academy