COMPUTER ENGINEER

Örneklere git
Blog
Next.js / ASP.NET Core / SQL6 dk çalışma
15/ 41

ASP.NET Core hattı

Middleware hattı: sıra neden önemli?

Her middleware isteği görebilir, değiştirebilir, durdurabilir veya bir sonrakine verebilir.

AnlaÖrneği inceleKendin uygula

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.

NERESİNDE KULLANIRSIN?

Güvenlik, hata yönetimi ve performans özellikleri doğru sırada olmadıkça çalışmaz.

SIK YAPILAN HATA

UseAuthorization’ı UseAuthentication’dan önce yazmak veya hata yakalayıcıyı hattın sonuna koymak.

CANLI ANİMASYON

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.

İSTEMCİKENARWEB SUNUCUSUAPI · ASP.NET COREVERİTarayıcıKullanıcının ekranıAğDNS · TCP · TLSTers vekilTLS sonlandırma, sıkıştırmaNext.js sunucusuSSR ve route handlerKestrelHTTP sunucusuHata yakalayıcıMiddlewareRoutingEndpoint seçimiHız sınırıMiddlewareKimlik doğrulamaKim olduğunYetkilendirmeNeye izin varModel bindingHTTP → C# + doğrulamaControllerEndpoint koduServisİş kuralları (DI)RedisDağıtık önbellekEF CoreLINQ → SQLSQL ServerSorgu planı, indeks
GİDİŞ →

Biri giriş yapmadan yönetici mesajlarını istiyor.

TarayıcıSenin ekranın. İsteği yazan ve sonunda cevabı sayfaya çeviren yer.
1 / 6
01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

Temsili örnek
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.

02 / SIRA SENDE

Ö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
Açıklamalı çözüm
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.