Middleware Mantığı: İstek Hattını (Request Pipeline) Özelleştirme

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

ASP.NET Core Middleware: İstek ve Yanıt Hattını Yönetmek​


Middleware, bir HTTP isteğini işleyen ve bir sonraki bileşene devreden (veya hattı kesen) küçük kod parçalarıdır. Uygulamanıza gelen her talep, bu bileşenlerin içinden geçerek işlenir.



1. İstek Hattı (Request Pipeline) Nasıl Çalışır?​


İstek hattını bir montaj hattı gibi düşünebilirsiniz. Her middleware bir iş yapar: Biri "bu kullanıcı giriş yapmış mı?" diye bakar, diğeri "gelen veriyi sıkıştır", bir diğeri ise "hataları kaydet" der.


  • []Zincirleme Yapı: Her middleware, işlemi bittiğinde next() komutu ile isteği bir sonrakine aktarır.
    []Çift Yönlü Geçiş: İstek önce ileri doğru gider (Request), Controller'a ulaşır, yanıt oluştuktan sonra aynı yoldan geri döner (Response). Yani bir middleware, yanıt istemciye gitmeden hemen önce son bir dokunuş yapabilir.



2. Hazır Middleware Örnekleri​


Yeni bir .NET projesi açtığınızda Program.cs içinde aslında birçok hazır middleware görürsünüz:

C#:
var app = builder.Build();

app.UseExceptionHandler("/Error"); // Hata yönetimi
app.UseStaticFiles();             // Resim, CSS gibi dosyaları sunar
app.UseRouting();                 // İsteği doğru Controller'a yönlendirir
app.UseAuthentication();          // Kimlik doğrulama
app.UseAuthorization();           // Yetki kontrolü

app.MapControllers();             // Hattın sonu: İşlemi yapar
app.Run();

Kritik Kural: Use... metotlarının sırası çok önemlidir. Örneğin, UseAuthorization metodu UseAuthentication metodundan önce yazılırsa, sistem kimin geldiğini bilmeden yetki kontrolü yapmaya çalışır ve hata verir.



3. Kendi Middleware'inizi Yazın (Custom Middleware)​


Bazen özel bir ihtiyacınız olur; örneğin tüm isteklere özel bir "X-Response-Time" header'ı eklemek veya gelen tüm talepleri loglamak.

C#:
public class LoglamaMiddleware
{
private readonly RequestDelegate _next;

public LoglamaMiddleware(RequestDelegate next)
{
    _next = next;
}

public async Task InvokeAsync(HttpContext context)
{
    // 1. İstek (Request) giderken yapılacaklar:
    Console.WriteLine($"İstek geldi: {context.Request.Path}");

    // 2. Bir sonraki middleware'i çağır
    await _next(context);

    // 3. Yanıt (Response) dönerken yapılacaklar:
    Console.WriteLine("İşlem tamamlandı, yanıt gönderiliyor.");
}

}



4. Hattı Kesen Middleware (Short-circuiting)​


Bazı durumlarda isteğin Controller'a kadar gitmesini istemezsiniz. Örneğin, kullanıcının IP adresi yasaklıysa (Blacklist), middleware next() metodunu çağırmaz ve doğrudan bir hata mesajı dönerek hattı keser.

Middleware TipiGörevi
AuthenticationKullanıcı kimliğini doğrular.
CORSFarklı domainlerden gelen istekleri yönetir.
Response CompressionYanıtı sıkıştırarak veri tasarrufu sağlar.
Custom LogicSizin yazdığınız özel iş kuralları.



Sonuç​


Middleware mantığını anlamak, ASP.NET Core'un nasıl nefes aldığını anlamaktır. İstek hattını doğru yöneterek uygulamanızı daha güvenli, daha hızlı ve daha esnek bir hale getirebilirsiniz. Unutmayın: Sıralama her şeydir!
 
Geri
Üst