Yükleniyor

.NET Core 8+ API Rate Limiting kullanımı

Blog Kategorileri

.Net Core Mimariler
Tasarım Desenleri
ORM Araçları
API Geliştirme
Web Geliştirme
Veritabanları
4 Aralık 2025 Perşembe
.NET Core 8+ API Rate Limiting kullanımı

Merhaba,

Modern web uygulamalarında API’ler, yüksek trafik ve kötü niyetli istekler karşısında korunmalıdır. Bu noktada rate limiting (istek sınırlama) devreye girer. Rate limiting, belirli bir zaman diliminde kullanıcıların yapabileceği istek sayısını sınırlar ve sistemin stabil çalışmasını sağlar.

.NET 8 ile birlikte rate limiting artık native olarak framework içinde destekleniyor, yani ekstra paket kurmadan güçlü ve esnek sınırlamalar oluşturabilirsiniz. Bu yazıda hem temel hem de gelişmiş kullanım örnekleriyle .NET 8 API rate limiting’i detaylı olarak ele alacağım.

Rate Limiting Nedir ve Neden Önemlidir?

Rate limiting, API’ye yapılan istekleri sınırlandırma mekanizmasıdır. Başlıca kullanım amaçları:

  1. API sunucusunu aşırı yüklenmeden korumak.

  2. DDoS ve brute-force saldırılarına karşı önlem almak.

  3. Ücretli planlarda kullanıcı başına kota uygulamak.

Örnek senaryo:
Bir API endpoint’ine saniyede 1000’den fazla istek gelirse, backend çökebilir. Rate limiting ile, her kullanıcı için saniyede 5 istek limiti koyarak sistem stabil kalır.

.NET 8’de Rate Limiting’in Avantajları

Önceki sürümlerde ekstra paketler kullanmak zorundaydık. Artık .NET 8 ile:

  1. Middleware üzerinden kolay entegrasyon.

  2. Fixed Window, Sliding Window, Token Bucket gibi farklı stratejiler.

  3. Endpoint, kullanıcı veya IP bazlı dinamik politikalar.

  4. Fazla istek geldiğinde özelleştirilebilir response.

Rate Limiting servisini eklemek

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRateLimiter(options =>
{
    options.AddFixedWindowLimiter("Fixed", limiterOptions =>
    {
        limiterOptions.PermitLimit = 5;        
        limiterOptions.Window = TimeSpan.FromSeconds(10);
        limiterOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
        limiterOptions.QueueLimit = 2;
    });
});

Detaylı Açıklama:

Parametre Ne İşe Yarar? Örnek
PermitLimit Window süresi boyunca izin verilen maksimum istek sayısı 10 saniyede en fazla 5 istek
Window Limitin resetlendiği süre 10 saniye
QueueProcessingOrder Fazla gelen isteklerin sıraya alınma sırası OldestFirst → önce gelen önce işlenir
QueueLimit Sıraya alınabilecek maksimum istek 2

Senaryo Örneği:

PermitLimit = 5, QueueLimit = 2, Window = 10 saniye Kullanıcı 0–10. saniyeler arasında 7 istek yaparsa: 5 istek kabul edilir ve 7. istek sıraya alınır istek direkt reddedilir saniyede window resetlenir, yeni 5 istek hakkı verilir

Middleware’i eklemek

 app.UseRateLimiter();
  1. Bu middleware pipeline’ın başına eklenir ve tanımlı limitleri uygular.

  2. Global olarak veya sadece belirli endpoint’lerde kullanılabilir.

Endpoint tanımlamak ve rate limit atamak

Minimal API

app.MapGet("/", () => "Hello World!").RequireRateLimiting("Fixed");
  1. Endpoint’e "Fixed" politikasını uyguladık.

  2. Farklı endpoint’ler için farklı limitler veya global policy kullanılabilir.

Rate Limiting Stratejileri

 Sliding Window Limiter

  1. Pencere kaydırmalı limit.

  2. Ani trafik patlamalarını daha iyi yönetir.

options.AddSlidingWindowLimiter("Sliding", limiterOptions =>
{
    limiterOptions.PermitLimit = 10;
    limiterOptions.Window = TimeSpan.FromMinutes(1);
    limiterOptions.SegmentsPerWindow = 6;
});
  1. 1 dakikalık window 6 segment’e bölünür.

  2. Her segment kendi içinde istek sayısını sayar ve toplam 10 izni geçemez.

Token Bucket Limiter

  1. İstekler token ile kontrol edilir.

  2. Tokenler belirli aralıklarla replenish edilir.

options.AddTokenBucketLimiter("TokenBucket", limiterOptions =>
{
    limiterOptions.TokenLimit = 20;
    limiterOptions.QueueLimit = 5;
    limiterOptions.ReplenishmentPeriod = TimeSpan.FromSeconds(30);
    limiterOptions.TokensPerPeriod = 5;
});

Senaryo Örneği:

  1. TokenLimit = 20 → 20 istek hakkı

  2. 30 saniyede 5 token eklenir

  3. Fazla istek sıraya alınır veya reddedilir

Fazla İstek Durumunda Özel Response

app.UseRateLimiter(new RateLimiterOptions
{
    OnRejected = async (context, token) =>
    {
        context.HttpContext.Response.StatusCode = 429;
        await context.HttpContext.Response.WriteAsync(
            "Çok fazla istek yaptınız, lütfen bekleyin.",
            cancellationToken: token
        );
    }
});
  1. 429 HTTP status code: Too Many Requests.

  2. Kullanıcıya bilgilendirici mesaj dönülür.


Sonuç

.NET 8 ile API rate limiting artık daha kolay, güvenli ve esnek. Doğru strateji ile API’nizi yüksek trafikte güvenli ve stabil tutabilirsiniz.

Diğer bloglarımda görüşmek üzere 👋