0Pricing
C# Academy · Aula

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:

  • AddRateLimiter define políticas de janela fixa, janela deslizante, balde de tokens e simultaneidade.
  • UseRateLimiter ativa o middleware; RequireRateLimiting aplica uma política.
  • GlobalLimiter com PartitionedRateLimiter fornece contadores por cliente.
  • OnRejected personaliza 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

  1. Algoritmos de limitação de taxa
  2. Configurando o middleware de limitação de taxa
  3. Fundamentos do cache de saída
  4. Políticas de cache e invalidação
← Voltar para C# Academy