detaylariyla-asp.net-core-middleware-bölüm-1

Detaylarıyla ASP.NET Core Middleware BÖLÜM 1

Merhabalar bugün konumuz ASP.NET Core middleware (ara yazılım/ara modül).

ASP.NET Core inşa edilirken çok modüler bir yapı ile inşa edildi .Buradaki modüler kısmını yazının devamında anlayacaksınız. ASP.NET Core- pipeline (hat) mimarisi stilini kullanmaktadır (gelen sorgular belirli middlewarelardan "ara yazılımlardan/ara modüllerden" geçmektedir, her bir middleware kendi işini yapmaktadır) (tasarım deseni veya mimari desen değil - mimari stil kullanmakta bu konuya diğer bir makalede değineceğim). Bu pipeline (hat) stili sayesinde middleware oluşturup pipeline (hat) üzerine ekleyerek oluşan pipeline (hat) sayesinde'de uygulama omurgasını oluşturmaktayız.

Sonuç olarak AOP özelliklerini uyğulayabilmemizi ve küçük modüller ekleye bilmemizi sağlar ve bu sayede kod tekrarı gibi v.b durumlardan kurtarır ayrıca bize esnek ve genişleyebilen framework yapısı sunmuş olur. 

Açıklıyalım..

Detaylı anlatıma geçmeden önce middleware'in iki esas çalışma yapısı var bunlar :

·        Pipelinede bir sonraki middleware çağrılıp çağrılmayacağını idare edebilir

·        Bir sonraki middleware'dan önce veya sonra işlemini gerçekleştirebilmektedir (zincir yapısı)

Aslında ASP.NET Core soyut bir web framework'dür ve bize sunduğu owin omurgası yada uygulama omurgası ile bizim kendi uygulamamızı middleware şeklinde takarak hat (pipeline) oluşturmamızı sağlıyor (birden fazla middleware eklendiği zaman bu pipelinenin içindeki middlewarelar her biri bir birine baglanarak zincir şeklinde çağırmaktadırlar ve aslında Chain Of Responsibility  mantığını kullanmaktadır, kısaca COR) ve bu sayede genel uygulama çalışmaya başlıyor, mesela sorgu belirli filtrelerden geçirilip sonuç oluşturuluyor. ASP.NET Core gelen sorguyu karşılık bir cevap üretip kullanıcılara (clients) geri göndermektedir ve bunu bize sağlayan middlewarelerdir ,görevleri gereği gelen sorguyu (request) ve çıktıyı (response) handle edebilmektedirler. Aslında bizim ASP.NET Core soyut dedik çünkü pipeline üzerinde eğerki MVC komponentimizi eklemezsek ozaman uygulama herhangi bir sonuç vermiyecektir bununda sebebi omurgamız/pipelinemızda çalıştırılacak middlewaremiz yoktur. MVC ile çalışabilmek için MVC'e ait middlewaremiz ASP.NET Core pipelinemıza entegre ederek/ekleyerek Controller/Action sorgumuzdan sonuç alabileceğiz (controller çalıştırılıp belirli bir ActionResult return edilir ve bu ActionResult execute edilip sonuç HttpResponse yazılmaktadır kullanıcıda bunu görmektedir). Yada istersek kendi custom middlewaremizi ekleyerek sorguyu işleyip veya çıktıyı işleyip sonuç alabileceğiz.

Neler yapabiliriz ?

Middleware ile aslında uygulamalarda genellikle belirli modüller kullanılır bunlar :

·        Logging

·        Authentification / Autherization

·        Routing

·        Static File

·        Response Caching

·        URL Rewriting

ve bunun gibi komponentler (ara modüllerde diyebiliriz) kullanılır.Tabiki kendimizde middleware yazabiliriz yazımızda göstereceğim bunu.

Uygulamamızda middleware oluşturmak için COR(bunu ifade etmiştik yukarıdaki yazıda) kullanmaktayiz. Middleware oluşturumanin iki yolu var :

·        IMiddleware interface ile (strongly typed middleware)

·        Sözleşmeye dayalı ile (convention-based middleware)

Örneklere geçmeden evvel middleware bir birini zincir şeklinde çağırdıkları için 'RequestDelegate' tipinde bir nesne almaktadırlar. Bu tip bir sonraki veya bir önceki (zincir yapısından kaynaklı) middleware zincirinin nesnesidir ve zincirin çağrılması sizin elinizdedir, yazımın ileriki kısmında daha detaylı hem middleware tiplerine göre ve aynı zamanda zincir kullanım biçiminide anlatacağım.

IMiddleware interface (strongly typed middleware)

Sözleşmeye dayalı ile (convention-based middleware)

·        Mutlaka InvokeAsync metodu ve giriş değişkeni olarakta mutlaka 'HttpContext' tipinde nesne almalıdır ve geri döndüreceği 'Task' tipin'de olmalıdır.

·        Ve middleware'nın COR şeklinde çalışması için sonraki middleware nesnesi gerekmektedir. Bu isteğe bağli eğerki bir sonraki middleware kesinlikle çağrılmayacaksa tanimlamaya bilirsiniz , aslında bu durumda bize middleware mimarisinin ne kadar esnek olduğunu göstermektedir.

Bi sonrakı yazımızı Sözleşmeye dayalı ara yazılım (convention based middleware) örnekleri üzerinden devam edeceğiz. Yazımızın devamını bekleyin..

Rəsul

Rəsul Hüseynov

Hüseynov Rəsul

Yazarın bu dilde en son postları

Bu postları da beyene yapabilirsiniz