Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC – Filtrelerde Öncelik İşlemleri

Asp.NET MVC mimarisinde sırasıyla Asp.NET MVC’de Filtrelere Giriş, Asp.NET MVC’de Exception Filtresi ve Asp.NET MVC’de Action & Result Filtreleri başlıklı yazılarımda filtrelere değinmiştik.Lakin mimaride hazır olarak gelen veya manuel olarak elle yazılan filtrelerde çalışma önceliği önem arz etmektedir.Bu yazımızda bu konuyu irdeleyeceğiz.

Mimaride hazır olarak gelen filtrelerde öncelik sırası ‘Authorization Filter‘, ‘Action Filter‘, ‘Result Filter‘ ve ‘Exception Filter‘ şeklindedir.
Tabi bu durumda aynı tipe sahip Attribute’lar yani filtreler öncelik sırasına göre çalışmaktadır.Bununla ilgili bir örnek yapalım.

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
    public class Karsilayici : ActionFilterAttribute, IActionFilter
    {
        public string KarsilayiciMetin { get; set; }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.HttpContext.Response.Write("<h4>" + KarsilayiciMetin + "</h4>");
        }
    }

Yukarıdaki gibi bir Attribute’umuz olduğunu varsayalım.Bu Attribute’u incelersek eğer, ‘AttributeUsage’ isimli Attribute ile işaretlenmiş bir yapıya sahip.’AttributeTargets.Method’ özelliğiyle bu Attribute’un bir metod üzerinde çalışacağını belirtiyoruz.’AllowMultiple = true’ özelliğiyle ise bir metodu bu Attribute ile birden fazla işaretleyebiliyoruz.

Şimdi herhangi bir Action metodu bu Attribute ile işaretleyelim.

        [Karsilayici(KarsilayiciMetin = "Merhaba")]
        [Karsilayici(KarsilayiciMetin = "Hoş geldiniz.")]
        public ActionResult Index()
        {
            return View();
        }

Yukarıdaki kod bloğunu incelerseniz eğer, bir Attribute sınıfı içinde bulunan Property’e parantezler eşliğinde ulaşabiliyor ve gerekli değeri set edebiliyoruz.
Eğer projeyi bu şekilde derleyip çalıştırırsak aşağıdaki görüntü ekrana gelecektir.
filtreler
Gördüğünüz gibi aynı tipe sahip filtreler öncelik sırasına göre devreye girmiş bulunmakta.Eğer ki, filtrelerin çalışma sırasını değiştirmek istiyorsanız “Order” parametresini kullanmanız yeterli olacaktır.

Örnek olarak aşağıdaki kod bloğunu inceleyiniz.

        [Karsilayici(KarsilayiciMetin = "Merhaba", Order = 2)]
        [Karsilayici(KarsilayiciMetin = "Hoş geldiniz.", Order = 1)]
        public ActionResult Index()
        {
            return View();
        }

Bu kod bloğunda ise, filtrelerimin “Order” parametrelerine verilen değer sıralaması neticesine göre çalışması gerçekleştirilecek ve ekrana aşağıdaki gibi yansıyacaktır.
filtreler2

İyi çalışmalar dilerim..

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

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