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:
AddRateLimiterdefine políticas de ventana fija, ventana deslizante, cubo de tokens y concurrencia.UseRateLimiteractiva el middleware;RequireRateLimitingaplica una política.GlobalLimiterconPartitionedRateLimiterproporciona contadores por cliente.OnRejectedpersonaliza 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
- Algoritmos de limitación de tasa
- Configuración del middleware de limitación de tasa
- Conceptos básicos del almacenamiento en caché de salida
- Políticas e invalidación de caché