Asp.NET MVC’de Filtrelere Giriş

Asp.NET MVC’nin biz programcılar açısından gözde olmasının binlerce sebeplerinden biriside Post – Back olayının olmamısıdır.Model<->View<->Controller ilişkisi sayesinde kullanıcıdan gelen her türlü talep, gerekli Controller sınıfındaki Action metodda işleyişini görmekte ve sonuç geri View(görüntü) tarafına gönderilip kullanıcıya gösterilmektedir.Peki her talep doğrultusunda ilgili Controller sınıfı ve o Controller sınıfı içindeki Action metod direkt olarak sorgusuz sualsiz çalışıtırılacak mıdır?Ya da çalıştırılacaksa belirli şartlar altında algoritmayı yönlendiremez miyiz?Bu sorulara cevap olarak MVC mimarisindeki Filtreleri verebiliriz.

Filtreler, kullanıcılar tarafından gelen her istek doğrultusunda devreye girip çeşitli işlemler gerçekleştiren sınıflardır.Aslında özel sınıf olarak nitelendirdiğimiz “Attribute(Nitelik)” lardır.

Filtreler, ilgili Controller çalışmadan öncede ya da sonra çalışabilirler.Aynı şekilde ilgili Controller sınıfı içinde bulunan Action metod çalışmadan önce ya da sonra çalışabilirler.Bu özellikleri sayesinde sitemiz için genel veya özel önlemler alınabilir.Örnek olarak; “Sepet(Controller).cs” isminde bir Controller sınıfı mevcut ve bu sınıf içinde “SepettenSil” isminde bir Action metod bulunmaktadır.Eğer ziyaretçi sitemize üye girişi yapmamışsa, sepetimizle ilgili hiç bir iş yapamasın ve sepetimizi görmesin.Bu durumda “Sepet(Controller).cs” isimli Controller’ımızın üstüne gerekli Attribute’u yazıyor ve sitemize giriş işlemlerini kontrol ettikten sonra bu Controller’ı çalıştırıyoruz.Tabi bu yazacağımız Attribute bu işlemin önlemini alabilecek tarzda önceden programlanmış bir sınıf olacaktır.

Şimdilik fazla detaya girmeyeceğim.Yazımızın ilerilerinde konuyu dahada detaylandırıp pratikleştireceğiz.

Kendi ellerimizle, ihtiyacımıza yönelik filtreler oluşturabilir ve kullanabiliriz.Bu konu hakkında önceden yazmış olduğum MVC Attribute Oluşturma başlıklı yazıyı okuyabilirsiniz.

Lakin bu yazımızda MVC tarafından otomatik olarak derlenmiş Filtrelerden söz edeceğiz ve bundan sonraki yazılarımız o filtreleri sırasıyla özel olarak ele alacağız.MVC içindeki filtrelerimiz aşağıdaki tabloda verilmiştir.

 Filter

 Interface

 Default Implementation


 Authorization Filter  IAuthorizationFilter AuthorizeAttribute
 Action Filter  IActionFilter ActionFilterAttribute
 Result Filter  IResultFilter ActionFilterAttribute
 Exception Filter  IExceptionFilter HandleErrorAttribute

Authorization : Diğer filtreler ve Action metodlardan önce çalışmaktadır.Controller ya da Controller içindeki Action metoda erişim kısıtlamak için kullanılır.
Exception : Hata durumlarında çalışan filtredir.
Action : Herhangi bir Controller sınıfında bulunan Action metottan önce ya da sonra çalışır.
Result : Action Result çalıştırılmadan önce ya da çalıştırıldıktan sonra çalışır.

Filtreler içinde bir Attribute olduklarını söylemiştik.Attribute’ları Controller sınıfları ya da Action metodlar için kullanabilirsiniz.Burada dikkat etmemiz gereken bir kaç husus mevcuttur.

“A” isminde bir Attribute’umuz mevcut olsun.Eğer bu nitelik “B(Controller).cs” isimli Controller sınıfına uygulanırsa, bu sınıf içerisindeki bütün Action metodlar, “A” isimli Attribute’tan etkilenecek ve işaretlenmiş varsayılacaktır.Yani işaretlemede dıştan içeriye doğru etki vardır.
Örnek olarak aşağıdaki kod bloğunu inceleyiniz.

    [A]
    public class BController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }

Burada “Index” isimli Action metodu “A” isimli Attribute’tan etkilenecek ve işaretlenmiş olacaktır.

Bir başka husus ise, istenilen Action metoda istenilen Attribute uygulanabilir.

    public class HomeController : Controller
    {
        public ActionResult Kayit()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Kayit(string KullaniciAdi)
        {
            return View();
        }
    }

Yukarıdaki kod bloğunu incelerseniz eğer, “Home(Controller).cs” isimli Controller sınıfı içerisinde “Kayit” isimli Action metod ve OverLoad’ı mevcut.Dikkat ederseniz eğer, OverLoad metodu “HttpPost” isimli bir nitelikle işaretlemişlerdir.Lakin bu durumda “Home(Controller).cs” Controller sınıfı içerisinde bir tek “Kayit” isimli Action metodunun OverLoad’ına “HttpPost” niteliği uygunlanmış olmaktadır.Controller ve Kayit isimli metoda bir işaretleme ya da uygulama gerçekleştirilmemiştir.

Son hususu ise aşağıdaki kod bloğundan inceleyiniz.

    [Authorize]
    public class HomeController : Controller
    {
        [AttributeUsage(AttributeTargets.Class)]
        public ActionResult A()
        {
            return View();
        }
        [LoaderOptimization(2)]
        public ActionResult B()
        {
            return View();
        }
    }

Yukarıdaki kod bloğunda ise “Home(Controller).cs” isimli Controller sınıfımız “Authorize” isimli Attribute ile işaretlenmiş.Bu durumda “Home(Controller).cs” isimli Controller sınıfı içerisinde bulunan “A” ve “B” isimli iki Action metotta bu “Authorize” isimli nitelikten etkilenmiş bulunmaktadır.Yani bu Attribute, Controller sınıfı içindeki bütün Action metodlara uygulanmaktadır.

“A” isimli Action metodumuzu incelersek eğer, “AttributeUsage” isimli bir nitelikle işaretlenmiş durumdadır.(Dikkat!!! Burada Attribute’ların ne işe yaradıklarından bahsetmeye lüzum yoktur.).Haliyle içinde bulunduğu Controller’ın işaretlendiği “Authorize” isimli Attribute ile sadece kendisine işaretlenmiş “AttributeUsage” Attribute’lar aynı anda uygulanmış olmaktadır.Bu durum “B” isimli Action metod içinde geçerlidir.Hem “Authorize” hem de “LoaderOptimization” isimli Attribute’lar etkisinde kalmaktadır.

Bu yazımızda Asp.NET MVC Filtrelerinden bahsetmiş olduk.Attribute yapısındaki Filtreler eşliğinde MVC projelerimizde belirli kısıtlamalar ve şart kontrolleri gerçekleştirebiliriz.

Sonraki yazılarımızda sırasıyla yukarıdaki tabloda verilen Filtreleri irdeleyeceğiz.
İyi çalışmalar dilerim..
Görüşmek üzere..

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

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

*