Asp.Net Core ‘da Middleware Yapısı

Selamlar,
Bu makalede Asp.Net Core’da Middleware yapısını inceliyor olacağız. Herhangi bir senaryomuz olmadan tamamen middleware’ın ne olduğunu anlamaya çalışacağız.

Asp.Net Mvc ile uygulama geliştirmiş geliştiricilerin bu yapıya çokta yabancı olmadığını söyleyebiliriz. Asp.Net Mvc tarafında middleware yapılarına benzer olarak Filters‘ları verebiliriz. Filterlarda ki amaç bir uygulamada parça işler üretmek ve bazı işlemler gerçekleşmeden önce yada gerçekleştikden sonra araya girerek öncesine bazı işlemleri gerçekleştirmek için kullanılır. Middleware yapılarında da amaç tamda budur. Hadi gelin bu örnekten sonra Middleware yapılarını tanıyalım ve örneklendirmeye çalışalım.

NOT:Yukarıda ki örnek Asp.Net Mvc’den Asp.Net Core’a geçiş yapan geliştiricelerin gözünde birşeylerin daha net canlanması için verilmiştir.

Middleware Nedir?
Middleware ,Request ile Response arasına girerek uygulamamızın istekler karşısında nasıl tepki vereceğini belirleyen yapılardır. Middleware’lar uygulama açılırken pipeline’nin hangi sıraya göre
işleneceğini belirler.Bu sebeble uygulamamıza eklenecek middleware’ların sırası oldukça önemlidir.Çünkü middleware’lar eklenen sıraya göre çalışmaktadır.

Yukarıdaki şekilde görüleceği üzere istek ilk olarak Middleware1‘e gelir. Middleware1‘de Next(); metodunu görene kadar buradaki işlemleri yapar Next(); metodunu görünce bir sonraki Middleware’a geçer. Middleware2 çalıştırılır ve Next(); metodu görene kadar buradaki işlemler yapılır. Next(); görünce Middleware3 geçer ve son olarak buradaki işlemleri yapar. Geri dönüşte ilk olarak Middleware2 de başka işlem varsa onu gerçekleştirir.Sonra Middleware1 bakar burada işlem varsa onuda bitirip kullanıcıya dönüş yapar.


Daha önce kaleme aldığım .Net Core Nedir? makalesinde .Net Core mimarisinde bütün yapılandırmaları startup içerisinde yaptığımız söylemiştik.
Configure(); ve ConfigureServices(); metodlarının işlevlerine de oradan detaylıca değinmiştik. Bu konuda eksikleriniz varsa buradan ulaşabilirsiniz. Projemizi oluşturduğumuzda yukarıdaki görseldeki gibi default olarak bazı servisler ve middleware’lar hazır eklenmiş olarak gelir. Bizde hem mevcut middileware’ları kullanırken hemde custom yazdığımız middleware’ları startup dosyası içerisinde tanıtıyor olacağız.

USE Metodu
Uygulamamıza middleware eklerken en çok kullanılan yöntemlerden birisidir.


RUN Metodu
Middleware’lar arasında kısa devre yapma özelliği gösterir.Bu middleware çalıştığı zaman bu komut içerisinde ki işlemler yapılır ve uygulama son bulur.

MAP Metodu
Uygulamamızda bir path yakalamamız gerekiyorsa bu metodu kullanırız.Gelen request’de gelinen url’e göre bu metoda girer ve bu metod içerisindeki kod bloğu çalışır.

MAPWHEN Metodu
Gelen request’de koşul tanımlamak için kullanılır. Eğer bu koşul sağlanırsa bu metod içerisinde ki kod bloğu çalışır.

Şuana kadar .Net Core içerisinde hazır olarak gelen ve middleware eklenirken kullanılan yöntemleri inceledik.Projenin oluşturulması aşamasında default olarak gelen app.UseHttpsRedirection();,app.UseStaticFiles();,app.UseRouting();,app.UseAuthorization(); ek olarak daha bir çok hazır middleware’ı ihtiyacımıza yönelik kullanabiliriz.

Custom Middleware Yazmak
Şimdi custom bir middleware yazarak bu middleware’ı nasıl IApplicationBuilder sınıfı içerisine ekleyip startup içerisinde nasıl çağırabiliriz onu inceleyeceğiz.

NOT: Configure(); metoduna dikkat ettiyseniz IApplicationBuilder türünde bir parametre almaktadır ve Configure(); metodu içinde middleware yapılandırmalarını bu parametre tipi üzerinden gerçekleştirmekteyiz. .Net Core içerisindeki hazır middleware’ları içerisinde barındıran sınıftır diyebiliriz.

Örnek:Uygulamamamıza gelen tüm isteklerin zamanları bir text dosyasına kayıt eden middleware yazalım ve her request’de middleware’ın nasıl araya girerek işlemleri gerçekleştirdiğini daha iyi anlayalım.

RequestTimeMiddleware.cs

InvokeAsync(); metodu ile gelen requestler dinlenir ve her request anında time.txt dosyasına request’in anlık time değeri yazılır.

RequestMiddlewareExtension.cs

Yazmış olduğumuz middleware’ı extension metod yardımı ile IApplicationBuilder sınıfı içersine ekliyoruz. Bu noktadan sonra tek yapmamız gereken startup içerisinde Configure(); metodu içerisinde çağırmak olacak.

Middleware Çağırımı

Son olarak yazmış olduğumuz custom middleware’ı startup içerisinde bulunan Configure(); metodu içerisinde çağırıyoruz.

Sonuç

Son görselimizi incelediğimizde middleware’ımız sorunsuz bir şekilde çalışmakta ve request ile response arasına girerek o anki request time değerini time.txt yazarak işlemi tamamladı.

Geldik bir makalenin daha sonuna. Umarım faydalı bir yazı olmuştur. Bir başka makalede görüşmek üzere. Hoşçakalın 🙂



BUNLAR DA HOŞUNUZA GİDEBİLİR...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir