Configurando o middleware de limitação de taxa
Aplique limites de taxa por endpoint e política.
Configurando o middleware de limitação de taxa é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
AddRateLimiter
A configuração começa com AddRateLimiter no contêiner de serviços. Você define uma ou mais políticas nomeadas e um código de status de rejeição global opcional.
builder.Services.AddRateLimiter(options =>
{
options.RejectionStatusCode =
StatusCodes.Status429TooManyRequests;
});Uma política de janela fixa
AddFixedWindowLimiter registra uma política nomeada. Defina o limite de permissões, a duração da janela e o comportamento da fila.
options.AddFixedWindowLimiter("fixed", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
limiter.QueueLimit = 0;
});Uma política de janela deslizante
AddSlidingWindowLimiter adiciona SegmentsPerWindow para controlar o nível de granularidade da suavização.
options.AddSlidingWindowLimiter("sliding", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.SegmentsPerWindow = 6;
limiter.QueueLimit = 0;
});Uma política de balde de tokens
AddTokenBucketLimiter define o tamanho do balde e a taxa de reposição.
options.AddTokenBucketLimiter("token", limiter =>
{
limiter.TokenLimit = 100;
limiter.TokensPerPeriod = 20;
limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
limiter.QueueLimit = 0;
});Uma política de simultaneidade
AddConcurrencyLimiter limita as solicitações simultâneas.
options.AddConcurrencyLimiter("concurrent", limiter =>
{
limiter.PermitLimit = 5;
limiter.QueueLimit = 10;
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});Adicionando o middleware
Ative a limitação de taxa no pipeline com UseRateLimiter. Coloque-o no início, depois do roteamento.
var app = builder.Build();
app.UseRateLimiter();
app.MapControllers();RequireRateLimiting
Aplique uma política nomeada aos pontos de extremidade com RequireRateLimiting (API mínima) ou com o atributo [EnableRateLimiting] (controladores).
app.MapGet("/search", () => Results.Ok())
.RequireRateLimiting("token");
// Controller equivalent:
// [EnableRateLimiting("token")]Desativando em pontos de extremidade específicos
Isente um ponto de extremidade de um limitador de grupo ou global com DisableRateLimiting ou [DisableRateLimiting].
app.MapGet("/health", () => Results.Ok())
.DisableRateLimiting();Um limitador global com partições
GlobalLimiter aplica-se a todas as solicitações. Use PartitionedRateLimiter.Create para fornecer a cada usuário ou IP seu próprio 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)
});
});Personalizando a rejeição
OnRejected permite adicionar um cabeçalho Retry-After ou um corpo de resposta amigável quando uma solicitação é limitada.
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);
};Aplicando a um grupo de rotas
Associe uma política a todo um grupo de rotas para que cada ponto de extremidade dentro dele compartilhe o limite.
var api = app.MapGroup("/api")
.RequireRateLimiting("fixed");
api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());Verificação rápida
Confirme a configuração do middleware.
Recapitulação
Você configurou a limitação de taxa:
AddRateLimiterdefine políticas de janela fixa, janela deslizante, balde de tokens e simultaneidade.UseRateLimiterativa o middleware;RequireRateLimitingaplica uma política.GlobalLimitercomPartitionedRateLimiterfornece contadores por cliente.OnRejectedpersonaliza a resposta 429.
Próximo tópico: armazenamento em cache da saída.
Perguntas Frequentes
A aula “Configurando o middleware de limitação de taxa” é grátis?
Sim — o texto completo de “Configurando o middleware de limitação de taxa” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Configurando o middleware de limitação de taxa”?
Aplique limites de taxa por endpoint e política. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Configurando o middleware de limitação de taxa”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Algoritmos de limitação de taxa
- Configurando o middleware de limitação de taxa
- Fundamentos do cache de saída
- Políticas de cache e invalidação