MehmetX.com

ASP.NET MVC Custom Action Filter

8.10.2017 20:07:18 | Okunma Sayisi : 6810 | Yorum Sayisi : 0

ASP.NET MVC' de Controller' lar, Action metotlarını barındırırlar ve bu Action metotlar da genellikle bir link (bağlantı) tıklamak, form submit etmek (göndermek) gibi kullanıcı etkileşimleri ile ilişkilendirilirler. Yani ekranda Detay Göster gibi bir link tıklandığında Controller içerisindeki ilgili Action' a request (istek) gönderilir, ya da ekrandaki bir kullanıcı kayıt formu doldurulup Kaydet butonu tıklandığında UyeKaydet gibi bir isimdeki bir Action' a form verileri gönderilir.

Kimi zaman, uygulamanızdaki Action metotlar çalışmadan önce ya da çalıştırıldıktan sonra bazı işlemler gerçekleştirmek isteyebilirsiniz (Örnek: Loglama, İstatistik tutma, vb.). ASP.NET MVC bu gibi gereksinimleriniz için Filter' ları (filtreleri) sunmaktadır. Filter' lar Controller' lardaki Action metotlara pre-action (action öncesi) ve post-action (action sonrası) davranışlar katan custom (özelleştirilmiş) class' lardır.

Filter' lar Attribute mantığı ile çalışmaktadırlar. Yani bir Attribute class' ından kalıtım aldırırsınız, sonrasında metot ya da class tanımları üzerine köşeli parantezler içerisinde Filter Attribute' unuzu kullanarak işaretleme yaparsınız ve yazdığınız Filter, işaretli olduğu Action(lar) ya da Controller(lar) için çalışır.

Örnek bir Custom Action Filter:

mvc_action_filter_create_filter.png



Yazmış olduğunuz Filter' ı;
  • Belirlediğiniz Action' lara
  • Belirlediğiniz Controller(lar) içerisindeki tüm Action' lara
  • Tüm Controller' lardaki tüm Action' lara uygulayabilirsiniz.

Belirlediğiniz Action' lara Filter uygulamak için; ilgili Action' ların üzerine, yazdığınız Filter Attribute' unu koymanız yeterlidir. Filter' ınız yalnızca işaretli olduğu Action' lar için çalışacaktır.

Aşağıdaki kod bloğunda; OrnekFiltre isimli Filter, yalnızca HomeController içerisindeki Index Action' ı için çalışacaktır.
mvc_action_filter_action_name.png




Controller(lar) içerisindeki tüm Action' lara Filter uygulamak için; ilgili Controller' ların üzerine, yazdığınız Filter Attribute' unu koymanız yeterlidir. Filter' ınız işaretli olduğu Controller(ler) içerisindeki tüm Action' lar için çalışacaktır.
Aşağıdaki kod bloğunda; OrnekFiltre isimli filter, HomeController içerisindeki tüm Action' lar için (Index ve Contact) çalışacaktır.
mvc_action_filter_controller_name.png




Tüm Controller' lardaki tüm Action' lara filter uygulamak için ise; 2 yöntem kullanabilirsiniz;
  1. Base bir Controller class' ı yazıp bu class üzerine Filter Attribute' unuzu koyarsınız ve diğer tüm Controller' larınızı bu Base Controller' dan kalıtım aldırırsınız, haliyle tüm Controller' lardaki tüm Action' lar için Filter uygulamış olursunuz.
  2. Diğer bir yöntem ise, Global.asax içerisinde Application_Start metodu içerisinde Global Filter olarak kayıt yapmak.


Aşağıdaki kod bloğunda (Global.asax dosyası); OrnekFiltre isimli Filter, proje içerisindeki tüm Action' lar için çalışacaktır. Herhangi bir Action ya da Controller üzerine işaretleme yapmaya gerek yoktur.
mvc_action_filter_global_filter.png

Peki tüm Action' lar için çalışsın ama 1 tanesi için çalışmasın istiyorsak? 👀
Sonraki makalelerde yer vereceğim bu soruya...
 

0 Yorum




page-top