ASP.NET Core Middleware Yazma ve Sırası Neden Önemli?

ASP.NET Core'da middleware, HTTP isteğini işleyen ve yanıtı hazırlayan bileşenlerdir. İstek pipeline'ında sırayla çalışırlar ve her middleware bir sonrakine karar verir. Sıra yanlışsa, kimlik doğrulama yapılmadan yetkilendirme kontrol edilebilir veya logging çalışmayabilir.

Middleware, `IApplicationBuilder` üzerinden kaydedilen ve `HttpContext` nesnesine erişen ara yazılımdır. İstek geldiğinde pipeline'da yukarıdan aşağıya doğru çalışır, yanıt ise aşağıdan yukarıya geri döner.

Örneğin, `UseAuthentication()` (kimlik doğrulama) `UseAuthorization()` (yetkilendirme) öncesinde gelmelidir. Aksi halde kullanıcı kim olduğu belli olmadan erişim kontrol edilir ve hata oluşur.

Şu kodu `Program.cs` dosyasına ekle:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1var builder = WebApplication.CreateBuilder(args);
2var app = builder.Build();
3
4// Middleware 1: İsteği loglama
5app.Use(async (context, next) =>
6{
7Console.WriteLine($"[LOG] İstek: {context.Request.Path}");
8await next();
9Console.WriteLine($"[LOG] Yanıt: {context.Response.StatusCode}");
10});
11
12// Middleware 2: Kimlik doğrulama simülasyonu
13app.Use(async (context, next) =>
14{
15var token = context.Request.Headers["Authorization"].FirstOrDefault();
16if (string.IsNullOrEmpty(token))
17{
18context.Response.StatusCode = 401;
19await context.Response.WriteAsync("Yetkisiz: Token gerekli");
20return; // Devam etme, yanıtı gönder
21}
22context.Items["User"] = "admin"; // Kullanıcı bilgisini sakla
23await next();
24});
25
26// Middleware 3: Endpoint
27app.MapGet("/", (HttpContext context) =>
28{
29var user = context.Items["User"]?.ToString()?? "Bilinmiyor";
30return $"Hoşgeldin, {user}!";
31});
32
33app.Run();

Çalıştırma:

1dotnet run

Test et:

1# Token olmadan
3# Çıktı: Yetkisiz: Token gerekli
4
5# Token ile
6curl -H "Authorization: Bearer token123" http://localhost:5000/
7# Çıktı: Hoşgeldin, admin!

Konsol çıktısı:

1[LOG] İstek: /
2[LOG] Yanıt: 401
3[LOG] İstek: /
4[LOG] Yanıt: 200

Gördüğün gibi, logging middleware her zaman çalışır, kimlik doğrulama ondan sonra gelen middleware'i kontrol eder. Sıraları değiştirsen, kimlik doğrulama logging'den önce yapılırdı ve sonuç değişirdi. ASP.NET Core'da bu sıra bir kural değil, bir tasarım kararıdır, sen belirlersin.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz