ASP.NET Core hattı
Middleware hattı: sıra neden önemli?
Her middleware isteği görebilir, değiştirebilir, durdurabilir veya bir sonrakine verebilir.
Kavramı anlayalım
ASP.NET Core’da istek, sırayla dizilmiş middleware bileşenlerinden geçer. Her biri bir ‘next’ temsilcisi alır: isterse işini yapıp isteği sonrakine verir, isterse yanıtı kendisi üretip hattı kısa devre yapar. Yanıt dönerken aynı middleware’ler ters sırayla tekrar çalışır; bu yüzden bir middleware hem öncesini hem sonrasını görebilir (örneğin süre ölçmek için).
Sıra davranışı belirler. Hata yakalayıcı en başta olmalıdır ki sonrakilerden fırlayan istisnaları yakalayabilsin. Routing, kimlik doğrulama ve yetkilendirmeden önce gelir, çünkü yetkilendirme seçilen endpoint’in [Authorize] bilgisini okumak zorundadır. Kimlik doğrulama yetkilendirmeden önce gelir, çünkü kim olduğunu bilmeden neye izin verileceğine karar verilemez.
Yanlış sıra çoğu zaman sessiz bir güvenlik hatasıdır: UseAuthorization, UseAuthentication’dan önce yazılırsa her kullanıcı anonim görünür ve korunan uçlar 401 döner; endpoint’e özel hız sınırı politikaları routing’den önce yazılırsa uygulanmaz. Simülatördeki ‘Yetkisiz istek’ senaryosu bu sıranın neden işe yaradığını adım adım gösterir.
Güvenlik, hata yönetimi ve performans özellikleri doğru sırada olmadıkça çalışmaz.
UseAuthorization’ı UseAuthentication’dan önce yazmak veya hata yakalayıcıyı hattın sonuna koymak.
Bir mektubun şehirdeki yolculuğu
İsteği bir mektup, sunucuyu bir şehir gibi düşün. Senaryo seç, oynat ve mektubun hangi kapıdan geçip nerede durdurulduğunu izle.
Biri giriş yapmadan yönetici mesajlarını istiyor.
Aynı konu. Üç farklı derinlik.
app.UseExceptionHandler();
app.UseRouting();
app.UseRateLimiter();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();Bu projedeki temel sıra.
Bu sayfa gerçek bir sunucuya veya veritabanına bağlanmaz. Kod örnekleri .NET 8, Next.js ve SQL Server için temsilîdir; süreler simülasyondaki örnek değerlerdir, ölçüm değildir. Örnekleri yalnız kendi geliştirme ortamında dene; gerçek bağlantı dizesi, token veya parola paylaşma.
Önce kendin dene.
Bir geliştirici hatayı ayıklamak için app.UseExceptionHandler() satırını MapControllers()’ın altına taşıdı. Controller’da fırlayan bir istisna artık nasıl davranır?
Çözümü ve açıklamasını göster
Hata yakalayıcı artık controller’dan önce çalışmadığı için istisnayı sarmalamaz.
İstisna sunucunun varsayılan davranışına düşer: biçimsiz bir 500,
geliştirme ortamında ise yığın izi içeren bir sayfa.Bir middleware yalnız kendisinden sonra eklenenleri sarabilir. Hata yakalayıcının işe yaraması için en başta olması gerekir.