0Pricing
C# Academy · Lección

Configuración del middleware de limitación de tasa

Aplique límites de tasa por endpoint y política.

Configuración del middleware de limitación de tasa es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.

AddRateLimiter

La configuración comienza con AddRateLimiter en el contenedor de servicios. Defina una o varias políticas con nombre y, opcionalmente, un código de estado global para los rechazos.

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

Una política de ventana fija

AddFixedWindowLimiter registra una política con nombre. Establezca el límite de permisos, la duración de la ventana y el comportamiento de la cola.

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

Una política de ventana deslizante

AddSlidingWindowLimiter añade SegmentsPerWindow para controlar la granularidad del suavizado.

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

Una política de cubo de tokens

AddTokenBucketLimiter establece el tamaño del cubo y la tasa de reposición.

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

Una política de concurrencia

AddConcurrencyLimiter limita las solicitudes simultáneas.

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

Adición del middleware

Active la limitación de tasa en la canalización con UseRateLimiter. Colóquela al principio, después del enrutamiento.

var app = builder.Build();

app.UseRateLimiter();

app.MapControllers();

RequireRateLimiting

Aplique una política con nombre a los endpoints mediante RequireRateLimiting en Minimal APIs o mediante el atributo [EnableRateLimiting] en los controladores.

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

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

Desactivación en endpoints específicos

Excluya un endpoint de un limitador de grupo o global con DisableRateLimiting o [DisableRateLimiting].

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

Un limitador global con particiones

GlobalLimiter se aplica a todas las solicitudes. Use PartitionedRateLimiter.Create para asignar a cada usuario o IP su propio contador.

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

Personalización del rechazo

OnRejected permite añadir un encabezado Retry-After o un cuerpo informativo cuando se limita una solicitud.

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

Aplicación a un grupo de rutas

Asocie una política a un grupo de rutas completo para que todos los endpoints incluidos compartan el límite.

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

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

Comprobación rápida

Confirme la configuración del middleware.

Resumen

Ha configurado la limitación de tasa:

  • AddRateLimiter define políticas de ventana fija, ventana deslizante, cubo de tokens y concurrencia.
  • UseRateLimiter activa el middleware; RequireRateLimiting aplica una política.
  • GlobalLimiter con PartitionedRateLimiter proporciona contadores por cliente.
  • OnRejected personaliza la respuesta 429.

Siguiente: caché de salida.

Preguntas frecuentes

¿La lección «Configuración del middleware de limitación de tasa» es gratis?

Sí — el texto completo de «Configuración del middleware de limitación de tasa» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Configuración del middleware de limitación de tasa»?

Aplique límites de tasa por endpoint y política. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C# Academy?

No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Configuración del middleware de limitación de tasa»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C# Academy?

Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Algoritmos de limitación de tasa
  2. Configuración del middleware de limitación de tasa
  3. Conceptos básicos del almacenamiento en caché de salida
  4. Políticas e invalidación de caché
← Volver a C# Academy