in Eski Blog Yazılarım

ASP.NET MVC3 Filters

MVC tasarım kalıbı ile birlikte bir taşla 2 kuş değil, 1 taşla 10 kuş vurmaya alıştık bu alışkanlığı en bariz şekilde hissetiren özelliklerin başında ise MVC’nin Filters özelliği geliyor.

Filters’lar adından da anlaşılacağı gibi web uygulamanıza gelen her bir isteğin arasına girip belirli evrelerinde ihtiyacınıza göre işlemler yapabileceğiniz mekanizmalardan oluşuyor. Bu mekanizmalar bazen sayfanın çalışma zamanının alınması, bazen de güvenliği sağlayan kontroller olabiliyor. İsterseniz tüm uygulamanız için, isterseniz de belirli istekler geldiğinde filitre uygulayabiliyorsunuz.

Filters’lar method’un başına birer özellik (Attiribute) olarak kullanılmaktadır ve ActionFilterAttribute sınıfından türetilmesi gerekmektedir. Daha sonrada ihtiyacımız olan olayları override edip rahatlıkla kullanabilmektesiniz.
Yazı bir işe yarasındiye basit bir senaryo belirleyip ona göre hareket ettim, bakalım filters’lar ile neler yapabiliyoruz.

Belirlediğim gaddar senaryoya göre web uygulamama internet explorer ile girişi yasaklamak istiyorum ve bunun içinde en iyi yol Global Filters’i kullanmak olduğunu biliyorum ve aşağıdaki gibi kendi filter’imi  oluşturuyorum.

Gördüğünüz gibi ActionFilterAttribute sınıfından miras aldığım 4 adet olay var. Bu olayları uzun,uzun anlatmaya gerek yok sanırım isimlerinden hangi sıra ile çalıştığı belli. Biz Controller’ımızın içindeki kod çalışmaya başlamadan önce browser kontrolünü yapacağımız için OnActionExecuting olayına kodumuzu ekleyeceğiz.

OnActionExecuting olayında ziyaretçinin user-agent bilgisinden browser’ının ne marka olduğunu öğrendik ve içinde "MSIE" stringi geçiyorsa ContentResult’u kullanarak bir JavaScript uyarısı çıkarttık. Ziyaretçinin user-agent değerinin içinde aradığımız string’i bulamasaydık Context Resul normal bir ViewActionResult() olarak gelecekti buda bize sayfayı doğru görmemizi sağlayacaktı.

Şimdi bunu filitrenin tüm Action’larda çalışmasını sağlamak için MVC uygulamamızın Global ActionFilter koleksiyonuna eklememiz gerekli. Bununda Global.asax dosyasından tek bir satır ile yapabiliyoruz. Global.asax dosyasını açtıktan sonra ilgili satırı aşağıdaki gibi ekleyin.

Bu işlemden sonra artık web uygulamamıza internet explorer’dan girilemeyecektir.

Gördüğünüz gibi hayatı kolaylaştıran bir özellik. Filitrelerin başka bir kullanım şeklide Action’a özel bir Attribute şeklindedir. Bunada bir senaryo üretip örnekleyelim.

Senaryoyu yine kullanıcı üzerinden geliştirmeye devam edip ziyaretçinin oturum açıp, açamadığını kontrol eden bir filter yazacağız. Senaryomuza çok ugun çünkü web uygulamalarında herkesin görebileceği ve sadece üyelerin görebileceği yerler olmakta.

Burda görüldüğü gibi basit bir Session kotrolünden başka bir şey yapmıyoruz, esas olay Action’a eklediğim Attribute ile gerçekleşiyor.

        [LoginRequired]
        public ActionResult Users()
        {
            return View();
        }

Action’ın üzerine LoginRequired filitremizi koyduktan sonra bu action’a yapılan her istekte session kontrol edilecek, yoksa ziyaretçinin giriş yapması istenecektir. Ek olarak dikkat ederseniz .Net’te örf ve adetler gereği ile LoginRequiredAttribute yerine sadece LoginRequired yazabiliyoruz. tıpki Interface’lerin I ile başlaması geleneği gibi.

Burdaki uygulamayı https://github.com/c1982/oguzhan.info-Projects/tree/master/MvcApplication1 adresinden indirebilirsiniz.

Leave a Reply for hasan Cancel Reply

Yorum Bırak

Comment

  1. teşekkürler güzel bir örnek, session kontrolü yapıyorsunuz ama session’ın set edildiği yer login fonksıyonu mudur ? bu set işlemi nasıl yapılıyor ?

Webmentions

  • MVC Filters | Cemelma'dan küçük hatırlatmalar 20/12/2017

    […] […]