﻿
{"id":2110,"date":"2013-09-11T12:19:30","date_gmt":"2013-09-11T12:19:30","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2110"},"modified":"2013-09-11T12:19:30","modified_gmt":"2013-09-11T12:19:30","slug":"asp-net-mvcde-action-result-filtreleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvcde-action-result-filtreleri\/","title":{"rendered":"Asp.NET MVC&#8217;de Action &#038; Result Filtreleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Her eylemin tabiat\u0131nda bir ba\u015flang\u0131\u00e7 ve biti\u015f an\u0131 varsa yaz\u0131l\u0131msal algoritmalar da bu k\u0131staslara sahip olsa gerek.Yaz\u0131l\u0131m algoritmalar\u0131nda bulunan metod, olay veyahut farkl\u0131 bir yap\u0131daki eleman\u0131n tetiklenmesi bir ba\u015flang\u0131\u00e7 ve bu tetiklenme neticesinde i\u015flevlerin tamamlanmas\u0131 ise bir biti\u015f olarak tan\u0131mlanabilir.Asp.NET MVC mimarisinde baz\u0131 elemanlar i\u00e7in ba\u015flang\u0131\u00e7 ve biti\u015f <em>an<\/em>lar\u0131n da i\u015flemler yapabilmemiz i\u00e7in belirli yap\u0131lar sunmu\u015ftur.Tabi bu bir tek MVC mimarisinden ibaret olmamakla beraber, sadece .NET&#8217;e \u00f6zel bir durum de\u011fildir.Yukar\u0131da da bahsetti\u011fimiz gibi metod, olay vb. yap\u0131lar\u0131n tetiklenmesi durumunda, tetiklenen eleman\u0131n cinsine g\u00f6re belirli metodlar devreye girmekte ve ayn\u0131 \u015fekilde yap\u0131n\u0131n i\u015flevi son buldu\u011fu anda da bu durum ger\u00e7ekle\u015fmektedir.\u0130\u015fte bu yaz\u0131m\u0131zda Asp.NET MVC mimarisinde Action &amp; Result olarak isimlendirdi\u011fimiz metodlar\u0131n tetiklenme i\u015flemlerinde devreye giren metodlardan bahsedece\u011fiz ve ek olarak filtre yap\u0131s\u0131ndan s\u00f6z edece\u011fiz.<br \/>\n<!--more--><br \/>\n\u00d6ncelikle yaz\u0131m\u0131zla ilgili bir husustanda bahsetmek istiyorum.Bu yaz\u0131m\u0131z\u0131n ana konusu Action ve Result filtreleridir.Lakin ben k\u0131ssadan hisse yap\u0131p konuyu direkt aktarmaktan ziyade, konuyla alakal\u0131 olan, genel yani yaz\u0131l\u0131m d\u00fcnyas\u0131na yatk\u0131n teorik bilgilerede yer verdi\u011fimden dolay\u0131 ba\u015fl\u0131ktan ba\u011f\u0131ms\u0131z bir i\u00e7erik oldu\u011funu d\u00fc\u015f\u00fcnmeyiniz.<\/p>\n<p>Evet art\u0131k konumuzla ilgilenebiliriz.<br \/>\n\u00d6ncelikle Action ve Result filtreleri aras\u0131ndaki fark\u0131 irdelersek e\u011fer, &#8216;<em>Action Filter<\/em>&#8216;, Action metodlar\u0131 tektiklendi\u011fi anda yani metoddan \u00f6nce \u00e7al\u0131\u015fan filtrelerdir, &#8216;Result Filter&#8217;, ActionResult metodlar\u0131n\u0131n i\u015flevi tamamland\u0131\u011f\u0131nda yani metodun biti\u015f an\u0131nda devreye giren filtredir.<\/p>\n<p><em><strong>Kal\u0131t\u0131m Ald\u0131klar\u0131 Arabirimler<\/strong><\/em><br \/>\n&#8216;Action Filter&#8217; IActionFilter,<br \/>\n&#8216;Result Filter&#8217; IResult Filter<\/p>\n<p>\u015eimdi \u015fu soruyu sorabilirsiniz.<br \/>\n&#8220;<em>Tamamda arkada\u015f, biz bu \u00f6nce ve sonra \u00e7al\u0131\u015fan metodlar\u0131 nereden bulacaz ve nas\u0131l filtre olarak kullanacaz?<\/em>&#8221;<br \/>\nHemen cevaplarsak e\u011fer, bu metodlar\u0131 hi\u00e7 bir yerde bulamayaca\u011f\u0131m\u0131z\u0131 s\u00f6ylemek daha do\u011frucu olur.Lakin her hangi bir s\u0131n\u0131f\u0131 &#8220;<em>ActionFilterAttribute<\/em>&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretip yani kal\u0131t\u0131m ald\u0131rarak olu\u015fturursan\u0131z i\u015fte o zaman base s\u0131n\u0131f\u0131 dedi\u011fimiz kal\u0131t\u0131m al\u0131nan s\u0131n\u0131ftaki bu metodlar\u0131 override ederek kullanabilirsiniz.<\/p>\n<p><a title=\"MVC Attribute Olu\u015fturma\" href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-attribute-olusturma\/\" target=\"_blank\">MVC Attribute Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131m\u0131za g\u00f6z atarsan\u0131z e\u011fer, &#8220;ActionFilterAttribute&#8221; s\u0131n\u0131f\u0131 sayesinde Attribute olu\u015fturabiliyorduk.<\/p>\n<p>H\u0131\u0131\u0131, demek ki \u015f\u00f6yle d\u00fc\u015f\u00fcnebiliriz.Biz herhangi bir metod tetiklendi\u011fi andan \u00f6nce ve i\u015flemi bitti\u011fi andan sonra kontrol ya da herhangi bir i\u015flem yapacaksak e\u011fer, &#8220;ActionFilterAttribute&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretilmi\u015f \u00f6zel bir s\u0131n\u0131fta birazdan g\u00f6sterece\u011fimiz metodlar\u0131 kullanarak gerekli ayarlar\u0131 yapar, haliyle bu s\u0131n\u0131f\u0131 istedi\u011fim metodda Attribute(Nitelik) olarak kullanabilirim.Haliyle bu \u015fekilde istedi\u011fim metodun \u00e7al\u0131\u015fmas\u0131n\u0131 filtreleyebilir ve kontrol edebilirim.<\/p>\n<p>Umar\u0131m sorumuzun cevab\u0131n\u0131 verebilmi\u015fimdir.<\/p>\n<p>\u015eimdi metodlar\u0131m\u0131z\u0131 inceleyelim.<\/p>\n<p><strong>ActionFilterAttribute S\u0131n\u0131f\u0131ndan Override Edilebilen Metodlar<\/strong><\/p>\n<ul>\n<li><em><strong>OnActionExecuted<\/strong> <\/em>: A\u00e7t\u0131n metod \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131ktan sonra devreye giren metottur.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public override void OnActionExecuted(ActionExecutedContext filterContext)\r\n        {\r\n            base.OnActionExecuted(filterContext);\r\n        }\r\n<\/pre>\n<\/li>\n<li><strong><em>OnActionExecuting <\/em><\/strong>: Action metod tetiklendi\u011fi anda devreye giren metoddur.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public override void OnActionExecuting(ActionExecutingContext filterContext)\r\n        {\r\n            base.OnActionExecuting(filterContext);\r\n        }\r\n<\/pre>\n<\/li>\n<li><strong><em>OnResultExecuted<\/em><\/strong>: Action metod tetiklendikten sonra ActionResult tipinde sonu\u00e7 d\u00f6nd\u00fckten sonra devreye giren metod.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public override void OnResultExecuted(ResultExecutedContext filterContext)\r\n        {\r\n            base.OnResultExecuted(filterContext);\r\n        }\r\n<\/pre>\n<\/li>\n<li><strong><em>OnResultExecuting<\/em><\/strong>: Action metod tetiklendikten sonra ActionResult tipinde sonu\u00e7 d\u00f6nd\u00fcr\u00fclmeden \u00f6nce devreye giren metod.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public override void OnResultExecuting(ResultExecutingContext filterContext)\r\n        {\r\n            base.OnResultExecuting(filterContext);\r\n        }\r\n<\/pre>\n<\/li>\n<\/ul>\n<p>\u015eimdi konuyu \u00f6rneklendirme a\u00e7\u0131s\u0131ndan bir uygulama yapal\u0131m.\u00d6rnek olarak bir Action metodumuz tetiklendi\u011fi anda \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce sisteme giri\u015f yap\u0131lm\u0131\u015f m\u0131? yap\u0131lmam\u0131\u015f m\u0131? kontrol edelim.E\u011fer ki, sisteme giri\u015f yap\u0131lm\u0131\u015f ise o Action metod i\u015flevini s\u00fcrd\u00fcrs\u00fcn aksi halde ziyaret\u00e7iyi giri\u015f sayfas\u0131na y\u00f6nlendirilsin.<\/p>\n<p>Visual Studio&#8217;da bir MVC projesi olu\u015fturup, Controller katman\u0131na &#8220;Home(Controller).cs&#8221; isminde Controller s\u0131n\u0131f\u0131 ekliyorum.&#8221;Home(Controller).cs&#8221; s\u0131n\u0131f\u0131 i\u00e7erisine &#8220;Profil&#8221; ad\u0131nda bir ActionResult tipten metod olu\u015fturuyorum.\u0130\u015fte bu &#8220;Profil&#8221; isimli Action metodumuz tetiklendi\u011fi zaman, e\u011fer giri\u015f yap\u0131lm\u0131\u015fsa i\u015flemini ger\u00e7ekle\u015ftirecek yok e\u011fer yap\u0131lmam\u0131\u015f ise giri\u015f sayfas\u0131na y\u00f6nlendirecek.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Profil()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi Attribute&#8217;umuzu olu\u015ftural\u0131m.Solution i\u00e7erisinde &#8220;Class&#8221; isminde bir klas\u00f6r olu\u015fturarak nitelik s\u0131n\u0131f\u0131m\u0131z\u0131 i\u00e7inde olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public override void OnActionExecuted(ActionExecutedContext filterContext)\r\n        {\r\n            if (filterContext.RequestContext.HttpContext.Session&#x5B;&quot;Kullanici&quot;] == null)\r\n            {\r\n                    filterContext.RequestContext.HttpContext.Response.Redirect(&quot;http:\/\/www.google.com&quot;);\r\n            }\r\n            base.OnActionExecuted(filterContext);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, &#8220;KullaniciKontrol&#8221; ad\u0131nda s\u0131n\u0131f\u0131m\u0131z &#8220;ActionFilterAttribute&#8221; s\u0131n\u0131f\u0131ndan kal\u0131t\u0131m alm\u0131\u015ft\u0131r.\u0130stedi\u011fimiz i\u015flem, &#8220;Profil&#8221; Action metodu tetiklendi\u011fi andan \u00f6nce kullan\u0131c\u0131 giri\u015f yap\u0131p yapmad\u0131\u011f\u0131n\u0131 kontrol edece\u011finden dolay\u0131 &#8220;OnActionExecuted&#8221; metodunu override ediyoruz.&#8221;Kullanici&#8221; ad\u0131nda bir Session de\u011feri kontrol edildikten sonra e\u011fer bo\u015f ise ziyaret\u00e7iyi Google amcaya y\u00f6nlendirecektir.Giri\u015f sayfas\u0131 tasarlay\u0131p birde yaz\u0131m\u0131z\u0131 uzatmaktan ziyade Google&#8217;\u0131 tercih ettim.Google&#8217;\u0131n bu yaz\u0131m\u0131zda bizim giri\u015f sayfam\u0131z oldu\u011funu varsayal\u0131m \ud83d\ude42<\/p>\n<p>Attribute&#8217;umuz tamamland\u0131ktan sonra nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 inceleyece\u011fiz.Controller katman\u0131m\u0131zdaki &#8220;Home(Controller).cs&#8221; isimli s\u0131n\u0131f\u0131m\u0131za \u00f6ncelikle &#8220;using MvcApplication5.Class&#8221; k\u00fct\u00fcphanesini eklememiz gerekmektedir.Tabi proje ad\u0131na g\u00f6re k\u00fct\u00fcphane yolu de\u011fi\u015fkenlik g\u00f6sterebilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        &#x5B;KullaniciKontrol]\r\n        public ActionResult Profil()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, &#8220;Profil&#8221; isimli Action metodumuzu &#8220;KullaniciKontrol&#8221; Attribute&#8217;uyla i\u015faretlemi\u015f olduk.<\/p>\n<p>Son olarak &#8220;Profil&#8221; Action metodumuzun View katman\u0131ndaki &#8220;.cshtml&#8221; uzant\u0131l\u0131 dosyas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;h2&gt;Gen\u00e7ay Y\u0131ld\u0131z\u0131n Profili&lt;\/h2&gt;\r\n<\/pre>\n<p>E\u011fer bu \u015fekilde projemizi derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsak ve &#8220;Profil&#8221; Action metodunu tetiklersek kendimizi Google&#8217;da bulaca\u011f\u0131z.<\/p>\n<p>Burada &#8220;Kullanici&#8221; isimli Session de\u011ferini doldurup bir i\u015flem yapmayaca\u011f\u0131z.\u00c7\u00fcnk\u00fc konumuzun maksat\u0131n\u0131 a\u015fmaktad\u0131r.<\/p>\n<p>Son olarak konumuzu toparlarsak e\u011fer, \u00e7o\u011funlukla programlama dillerinin mimari \u00f6zelliklerinde bir metodun ba\u015flang\u0131\u00e7 ve sonu\u00e7 anlar\u0131nda i\u015fleve giren metodlar bulunmaktad\u0131r ve bu metodlar e\u015fli\u011finde mant\u0131ksal yollarla bir \u00e7ok soruna \u00e7\u00f6z\u00fcm bulunmaktad\u0131r.Asp.NET MVC mimarisinde bu metodlar sayesinde istedi\u011fimiz kriterleri kontrol edebiliyor ve ister Attribute istersekte farkl\u0131 yap\u0131lar elde ederek projelerimizde kullanabiliyoruz.Bu \u015fekilde esnekli\u011fi olan bir mimariyi b\u00fct\u00fcn hatlar\u0131ndan kullanmak, istikrarl\u0131 ve hiyerar\u015fik bir mant\u0131k \u00e7er\u00e7evesinde ortam sunar.Kompleks projeler bu yap\u0131lar ve esneklikler sayesinde kolay ve rahat bir raya girmektedirler.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Her eylemin tabiat\u0131nda bir ba\u015flang\u0131\u00e7 ve biti\u015f an\u0131 varsa yaz\u0131l\u0131msal algoritmalar da bu k\u0131staslara sahip olsa gerek.Yaz\u0131l\u0131m algoritmalar\u0131nda bulunan metod, olay veyahut farkl\u0131 bir yap\u0131daki eleman\u0131n tetiklenmesi bir ba\u015flang\u0131\u00e7 ve bu tetiklenme neticesinde i\u015flevlerin&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,345],"tags":[287,503,746,491,283,505,504],"class_list":["post-2110","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","tag-action","tag-actionfilter","tag-asp-net-mvc","tag-filtre","tag-mvc","tag-result","tag-resultfilter"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=2110"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2110\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}