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 Tipi | Görevi |
|---|---|
| Authentication | Kullanıcı kimliğini doğrular. |
| CORS | Farklı domainlerden gelen istekleri yönetir. |
| Response Compression | Yanıtı sıkıştırarak veri tasarrufu sağlar. |
| Custom Logic | Sizin 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!