YÜKLENİYOR...

ASP.NET Core'da Middleware Nedir? Kendi Middleware'ini Yazmak

ASP.NET Core'da Middleware Nedir? Kendi Middleware'ini Yazmak
Bir HTTP isteği web sunucusuna ulaştığında, tarayıcıdan gelen bu isteğin uygulamaya ulaşmadan önce geçtiği bir dizi işlem vardır. Örneğin, kimlik doğrulama yapılabilir, istek loglanabilir ya da hata yönetimi sağlanabilir. Bu işlemlerin her biri, ASP.NET C

Bir HTTP isteği web sunucusuna ulaştığında, tarayıcıdan gelen bu isteğin uygulamaya ulaşmadan önce geçtiği bir dizi işlem vardır. Örneğin, kimlik doğrulama yapılabilir, istek loglanabilir ya da hata yönetimi sağlanabilir. Bu işlemlerin her biri, ASP.NET Core'da middleware (ara katman yazılımı) olarak adlandırılır.

ASP.NET Core’un en güçlü yönlerinden biri de bu middleware mimarisidir. Her middleware, gelen isteği işler, gerekiyorsa bir yanıt döner veya bir sonraki middleware’e iletir. Bu sistem sayesinde uygulama davranışını modüler ve esnek bir şekilde kontrol edebiliriz.

Bu yazıda middleware kavramının ne olduğunu, nasıl çalıştığını ve nasıl özel bir middleware yazılacağını anlatacağız.


Middleware Nedir?

Middleware, ASP.NET Core uygulamasında HTTP isteklerinin geçtiği ardışık yazılım bileşenleridir. Her middleware, isteği işleyebilir, değiştirebilir ya da bir sonraki bileşene iletebilir. Middleware'ler sıralı çalışır ve bu sıralama Startup.cs dosyasındaki Configure metodunda belirlenir.

Basit Akış Mantığı:

HTTP İsteği → Middleware 1 → Middleware 2 → Controller

Varsayılan Middleware Örnekleri

ASP.NET Core, birçok hazır middleware ile birlikte gelir:

  • UseRouting() – URL yönlendirmesi yapar

  • UseAuthentication() – Kimlik doğrulama kontrolü

  • UseAuthorization() – Yetkilendirme denetimi

  • UseEndpoints() – Controller ve actionlara yönlendirme

  • UseStaticFiles() – CSS, JS gibi statik dosyaları sunar


Basit Bir Özel Middleware Yazalım

1. Yeni Middleware Sınıfı Oluşturma

public class ZamanlamaMiddleware
{
    private readonly RequestDelegate _next;

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

    public async Task InvokeAsync(HttpContext context)
    {
        var baslangic = DateTime.Now;

        await _next(context); // Bir sonraki middleware’e geç

        var bitis = DateTime.Now;
        var fark = bitis - baslangic;

        Console.WriteLine($"İstek işlenme süresi: {fark.TotalMilliseconds} ms");
    }
}

2. Startup.cs Dosyasına Eklemek

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMiddleware<ZamanlamaMiddleware>(); // Özel middleware’i devreye al
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

Bu örnekte, her gelen isteğin işlenme süresi hesaplanarak konsola yazdırılıyor.


Middleware Yazarken Dikkat Edilmesi Gerekenler

  • await _next(context) komutu çağrılmazsa istek zinciri kesilir.

  • Middleware sıralaması çok önemlidir. Örneğin, UseRouting() çağrılmadan önce yönlendirme yapılamaz.

  • Ortak işlemler (loglama, hata yönetimi, CORS vb.) için özelleştirilebilir.


Gerçek Hayatta Kullanım Alanları

  • Loglama – Her isteği ve yanıtı kaydetmek

  • CORS işlemleri – Tarayıcıdan gelen istekleri kontrol etmek

  • Hata yönetimi – Global exception handling

  • Kimlik kontrolü – Header’da token var mı kontrol etmek

  • Cache yönetimi – Sayfa sonuçlarını önbelleğe almak

Middleware mimarisi sayesinde bu işlemleri modül modül yönetmek mümkündür.

 

Kendi middleware'inizi yazarak, uygulamanızın istek-yanıt döngüsüne doğrudan müdahale edebilirsiniz. Böylece performans ölçümleri, güvenlik kontrolleri, hata yakalama gibi sistemsel işlemleri controller’lara karıştırmadan merkezi olarak yönetmiş olursunuz.

ASP.NET Core’un modern mimarisi sayesinde bu tür yapıların kurulması hem kolaydır hem de sürdürülebilirdir. Kendi projelerinizde, ihtiyaçlarınıza özel middleware'ler oluşturarak uygulamanızın kontrolünü tamamen elinize alabilirsiniz.