Hasan Akpürüm
Kıdemli Yazılım Danışmanı
Makele Detayı

Mvc Filters ActionFilterAttribute Geliştirme

21.12.2014 17:16:15

Mvc Filters ActionFilterAttribute Geliştirme

Filter’lar uygulamayı dikine kesen cross cutting işlemlerdir. Bu makalemizde kendi custom ActionFilterAttribute ümüzü geliştiricez.

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.

İlk örnek olarak Log Filter’ ımızı geliştirelim.

 

FilterAttributes adında bir klasör açıyoruz ve FilterLog adında class ekliyoruz.

FilterLog  sınıfımız ActionFilterAttribute sınıfından inherit(miras) alıyor.

Sıra geldi methodlarımızı override etmeye.

  1. İlk istek geldiğinde OnActionExecuting çalışır.
  2. View return edildikten sonra OnActionExecuted çalışır. (OnActionExecuting) da exception oluşursa OnActionExecuted methodunda yakalanır.
  3. OnActionExecuted ın hemen ardından OnResultExecuting çalışır.
  4. View render edildikten sonra OnResultExecuted çalışır. (OnResultExecuting) da exception oluşursa OnResultExecuted methodunda yakalanır.

İlk istek geldiğinde log’lamamızı yapalım. Ben durada log çıktısını değişkene attım ama loglamı yazmadım onu siz istediğiniz gibi loglarsınız. Hangi Controller ve Action dan gediğini aldık.

Action’ımızın başına geliştirmiş olduğumuz attribute ü yazdık.

Projemizi çalıştırdığımızda aşağıdaki gibi oldu.

Sonuç olarak text metnimizde HomeController sınıfının Index Action’nına geldiğini gördük.

 

Şimdi bir Exception oluşturup onu log layalım.

  1. View return edildikten sonra OnActionExecuted çalışır. (OnActionExecuting) da exception oluşursa OnActionExecuted methodunda yakalanır.

Demiştik yukarıda. OnActionExecuted methodumuzu yazalım ozaman. Eğer exception varsa log layacağız.

HomeController ımızda Exception fırlattık.

Çalıştırdık ve hatayı verdi daha sonra OnActionExecuted methodumuza düştü.

Exception null olmadığı için koşulumuza girdi.

HomeController da Index methodunda “Çok kötü bir hata bu !” diye exception oluşmuş ve onu yakaladık.

Eğer burada hata oluşmayıp view’i render  ederken hata oluşsaydı yani OnResultExecuting da  OnResultExecuted da yakalayacaktık hatayı.

Peki biz geliştirmiş olduğumuz Filtr ları sadece Actionların üstünde attribute olarakmı tanımlayabiliyoruz ?

Hayır. J
 

Classımızın üstüne tanımlarsa o sınıf içerisindeki bütün actionlar için geçerli olur. Örnek yapalım.

Çalıştırdığımızda ilk önde HomeController daki Index Action ımıza geldi

Detail action’ımıza 1 parametresi ile gittik

Gelen parametreyi ve değerini alabiliyoruz. Aşağıdaki gibide Logresult ımız oluştu.

Mvc filters da ActionFilterAttribute’ u anlatmaya çalıştım. Umarım yardımcı olabilmişimdir. Sorunuz olursa eğer hakkında kısmından bana sorularınızı email ile sorabilirsiniz.

Download Project

 

Yorum yaz

Thanks, your message is sent successfully.