﻿
{"id":1989,"date":"2013-08-20T23:01:36","date_gmt":"2013-08-20T23:01:36","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1989"},"modified":"2013-08-26T22:12:47","modified_gmt":"2013-08-26T22:12:47","slug":"asp-net-mvcde-filtrelere-giris","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvcde-filtrelere-giris\/","title":{"rendered":"Asp.NET MVC&#8217;de Filtrelere Giri\u015f"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Asp.NET MVC&#8217;nin biz programc\u0131lar a\u00e7\u0131s\u0131ndan g\u00f6zde olmas\u0131n\u0131n binlerce sebeplerinden biriside Post &#8211; Back olay\u0131n\u0131n olmam\u0131s\u0131d\u0131r.<em><span style=\"color: #ff9900;\">Model<\/span>&lt;-&gt;<span style=\"color: #ff9900;\">View<\/span>&lt;-&gt;<span style=\"color: #ff9900;\">Controller<\/span><\/em> ili\u015fkisi sayesinde kullan\u0131c\u0131dan gelen her t\u00fcrl\u00fc talep, gerekli Controller s\u0131n\u0131f\u0131ndaki Action metodda i\u015fleyi\u015fini g\u00f6rmekte ve sonu\u00e7 geri View(g\u00f6r\u00fcnt\u00fc) taraf\u0131na g\u00f6nderilip kullan\u0131c\u0131ya g\u00f6sterilmektedir.Peki her talep do\u011frultusunda ilgili Controller s\u0131n\u0131f\u0131 ve o Controller s\u0131n\u0131f\u0131 i\u00e7indeki Action metod direkt olarak sorgusuz sualsiz \u00e7al\u0131\u015f\u0131t\u0131r\u0131lacak m\u0131d\u0131r?Ya da \u00e7al\u0131\u015ft\u0131r\u0131lacaksa belirli \u015fartlar alt\u0131nda algoritmay\u0131 y\u00f6nlendiremez miyiz?Bu sorulara cevap olarak MVC mimarisindeki Filtreleri verebiliriz.<br \/>\n<!--more--><br \/>\nFiltreler, kullan\u0131c\u0131lar taraf\u0131ndan gelen her istek do\u011frultusunda devreye girip \u00e7e\u015fitli i\u015flemler ger\u00e7ekle\u015ftiren s\u0131n\u0131flard\u0131r.Asl\u0131nda \u00f6zel s\u0131n\u0131f olarak nitelendirdi\u011fimiz &#8220;Attribute(Nitelik)&#8221; lard\u0131r.<\/p>\n<p>Filtreler, ilgili Controller \u00e7al\u0131\u015fmadan \u00f6ncede ya da sonra \u00e7al\u0131\u015fabilirler.Ayn\u0131 \u015fekilde ilgili Controller s\u0131n\u0131f\u0131 i\u00e7inde bulunan Action metod \u00e7al\u0131\u015fmadan \u00f6nce ya da sonra \u00e7al\u0131\u015fabilirler.Bu \u00f6zellikleri sayesinde sitemiz i\u00e7in genel veya \u00f6zel \u00f6nlemler al\u0131nabilir.\u00d6rnek olarak; &#8220;Sepet(Controller).cs&#8221; isminde bir Controller s\u0131n\u0131f\u0131 mevcut ve bu s\u0131n\u0131f i\u00e7inde &#8220;SepettenSil&#8221; isminde bir Action metod bulunmaktad\u0131r.E\u011fer ziyaret\u00e7i sitemize \u00fcye giri\u015fi yapmam\u0131\u015fsa, sepetimizle ilgili hi\u00e7 bir i\u015f yapamas\u0131n ve sepetimizi g\u00f6rmesin.Bu durumda &#8220;Sepet(Controller).cs&#8221; isimli Controller&#8217;\u0131m\u0131z\u0131n \u00fcst\u00fcne gerekli Attribute&#8217;u yaz\u0131yor ve sitemize giri\u015f i\u015flemlerini kontrol ettikten sonra bu Controller&#8217;\u0131 \u00e7al\u0131\u015ft\u0131r\u0131yoruz.Tabi bu yazaca\u011f\u0131m\u0131z Attribute bu i\u015flemin \u00f6nlemini alabilecek tarzda \u00f6nceden programlanm\u0131\u015f bir s\u0131n\u0131f olacakt\u0131r.<\/p>\n<p>\u015eimdilik fazla detaya girmeyece\u011fim.Yaz\u0131m\u0131z\u0131n ilerilerinde konuyu dahada detayland\u0131r\u0131p pratikle\u015ftirece\u011fiz.<\/p>\n<p>Kendi ellerimizle, ihtiyac\u0131m\u0131za y\u00f6nelik filtreler olu\u015fturabilir ve kullanabiliriz.Bu konu hakk\u0131nda \u00f6nceden yazm\u0131\u015f oldu\u011fum <a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-attribute-olusturma\/\" target=\"_blank\">MVC Attribute Olu\u015fturma<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131y\u0131 okuyabilirsiniz.<\/p>\n<p>Lakin bu yaz\u0131m\u0131zda MVC taraf\u0131ndan otomatik olarak derlenmi\u015f Filtrelerden s\u00f6z edece\u011fiz ve bundan sonraki yaz\u0131lar\u0131m\u0131z o filtreleri s\u0131ras\u0131yla \u00f6zel olarak ele alaca\u011f\u0131z.MVC i\u00e7indeki filtrelerimiz a\u015fa\u011f\u0131daki tabloda verilmi\u015ftir.<\/p>\n<table style=\"width: 100%;\">\n<tbody>\n<tr>\n<td style=\"text-align: center;\">\n<h2><span><strong>\u00a0Filter<\/strong><\/span><\/h2>\n<\/td>\n<td style=\"text-align: center;\">\n<h2><span><strong>\u00a0Interface<\/strong><\/span><\/h2>\n<\/td>\n<td style=\"text-align: center;\">\n<h2><span><strong>\u00a0Default Implementation<\/strong><\/span><\/h2>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\" colspan=\"3\">\n<hr \/>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\"><strong>\u00a0Authorization Filter<\/strong><\/td>\n<td style=\"text-align: center;\">\u00a0IAuthorizationFilter<\/td>\n<td style=\"text-align: center;\">AuthorizeAttribute<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\"><strong>\u00a0Action Filter<\/strong><\/td>\n<td style=\"text-align: center;\">\u00a0IActionFilter<\/td>\n<td style=\"text-align: center;\">ActionFilterAttribute<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\"><strong>\u00a0Result Filter<\/strong><\/td>\n<td style=\"text-align: center;\">\u00a0IResultFilter<\/td>\n<td style=\"text-align: center;\">ActionFilterAttribute<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\"><strong>\u00a0Exception Filter<\/strong><\/td>\n<td style=\"text-align: center;\">\u00a0IExceptionFilter<\/td>\n<td style=\"text-align: center;\">HandleErrorAttribute<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Authorization :\u00a0<\/strong>Di\u011fer filtreler ve Action metodlardan \u00f6nce \u00e7al\u0131\u015fmaktad\u0131r.Controller ya da Controller i\u00e7indeki Action metoda eri\u015fim k\u0131s\u0131tlamak i\u00e7in kullan\u0131l\u0131r.<br \/>\n<strong>Exception :\u00a0<\/strong>Hata durumlar\u0131nda \u00e7al\u0131\u015fan filtredir.<br \/>\n<strong>Action :\u00a0<\/strong>Herhangi bir Controller s\u0131n\u0131f\u0131nda bulunan Action metottan \u00f6nce ya da sonra \u00e7al\u0131\u015f\u0131r.<br \/>\n<strong>Result :\u00a0<\/strong>Action Result \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce ya da \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131ktan sonra \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>Filtreler i\u00e7inde bir Attribute olduklar\u0131n\u0131 s\u00f6ylemi\u015ftik.Attribute&#8217;lar\u0131 Controller s\u0131n\u0131flar\u0131 ya da Action metodlar i\u00e7in kullanabilirsiniz.Burada dikkat etmemiz gereken bir ka\u00e7 husus mevcuttur.<\/p>\n<p>&#8220;A&#8221; isminde bir Attribute&#8217;umuz mevcut olsun.E\u011fer bu nitelik &#8220;B(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131na uygulan\u0131rsa, bu s\u0131n\u0131f i\u00e7erisindeki b\u00fct\u00fcn Action metodlar, &#8220;A&#8221; isimli Attribute&#8217;tan etkilenecek ve i\u015faretlenmi\u015f varsay\u0131lacakt\u0131r.Yani i\u015faretlemede d\u0131\u015ftan i\u00e7eriye do\u011fru etki vard\u0131r.<br \/>\n\u00d6rnek olarak a\u015fa\u011f\u0131daki kod blo\u011funu inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;A]\r\n    public class BController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Burada &#8220;Index&#8221; isimli Action metodu &#8220;A&#8221; isimli Attribute&#8217;tan etkilenecek ve i\u015faretlenmi\u015f olacakt\u0131r.<\/p>\n<p>Bir ba\u015fka husus ise, istenilen Action metoda istenilen Attribute uygulanabilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Kayit()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;HttpPost]\r\n        public ActionResult Kayit(string KullaniciAdi)\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, &#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131 i\u00e7erisinde &#8220;Kayit&#8221; isimli Action metod ve OverLoad&#8217;\u0131 mevcut.Dikkat ederseniz e\u011fer, OverLoad metodu &#8220;HttpPost&#8221; isimli bir nitelikle i\u015faretlemi\u015flerdir.Lakin bu durumda &#8220;Home(Controller).cs&#8221; Controller s\u0131n\u0131f\u0131 i\u00e7erisinde bir tek &#8220;Kayit&#8221; isimli Action metodunun OverLoad&#8217;\u0131na &#8220;HttpPost&#8221; niteli\u011fi uygunlanm\u0131\u015f olmaktad\u0131r.Controller ve Kayit isimli metoda bir i\u015faretleme ya da uygulama ger\u00e7ekle\u015ftirilmemi\u015ftir.<\/p>\n<p>Son hususu ise a\u015fa\u011f\u0131daki kod blo\u011fundan inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;Authorize]\r\n    public class HomeController : Controller\r\n    {\r\n        &#x5B;AttributeUsage(AttributeTargets.Class)]\r\n        public ActionResult A()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;LoaderOptimization(2)]\r\n        public ActionResult B()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda ise &#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131m\u0131z &#8220;Authorize&#8221; isimli Attribute ile i\u015faretlenmi\u015f.Bu durumda &#8220;Home(Controller).cs&#8221; isimli Controller s\u0131n\u0131f\u0131 i\u00e7erisinde bulunan &#8220;A&#8221; ve &#8220;B&#8221; isimli iki Action metotta bu &#8220;Authorize&#8221; isimli nitelikten etkilenmi\u015f bulunmaktad\u0131r.Yani bu Attribute, Controller s\u0131n\u0131f\u0131 i\u00e7indeki b\u00fct\u00fcn Action metodlara uygulanmaktad\u0131r.<\/p>\n<p>&#8220;A&#8221; isimli Action metodumuzu incelersek e\u011fer, &#8220;AttributeUsage&#8221; isimli bir nitelikle i\u015faretlenmi\u015f durumdad\u0131r.(<span style=\"font-size: x-small; color: #c0c0c0;\">Dikkat!!! Burada Attribute&#8217;lar\u0131n ne i\u015fe yarad\u0131klar\u0131ndan bahsetmeye l\u00fczum yoktur<\/span>.).Haliyle i\u00e7inde bulundu\u011fu Controller&#8217;\u0131n i\u015faretlendi\u011fi &#8220;Authorize&#8221; isimli Attribute ile sadece kendisine i\u015faretlenmi\u015f &#8220;AttributeUsage&#8221; Attribute&#8217;lar ayn\u0131 anda uygulanm\u0131\u015f olmaktad\u0131r.Bu durum &#8220;B&#8221; isimli Action metod i\u00e7inde ge\u00e7erlidir.Hem &#8220;Authorize&#8221; hem de &#8220;LoaderOptimization&#8221; isimli Attribute&#8217;lar etkisinde kalmaktad\u0131r.<\/p>\n<p>Bu yaz\u0131m\u0131zda Asp.NET MVC Filtrelerinden bahsetmi\u015f olduk.Attribute yap\u0131s\u0131ndaki Filtreler e\u015fli\u011finde MVC projelerimizde belirli k\u0131s\u0131tlamalar ve \u015fart kontrolleri ger\u00e7ekle\u015ftirebiliriz.<\/p>\n<p>Sonraki yaz\u0131lar\u0131m\u0131zda s\u0131ras\u0131yla yukar\u0131daki tabloda verilen Filtreleri irdeleyece\u011fiz.<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim..<br \/>\nG\u00f6r\u00fc\u015fmek \u00fczere..<\/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>Asp.NET MVC&#8217;nin biz programc\u0131lar a\u00e7\u0131s\u0131ndan g\u00f6zde olmas\u0131n\u0131n binlerce sebeplerinden biriside Post &#8211; Back olay\u0131n\u0131n olmam\u0131s\u0131d\u0131r.Model&lt;-&gt;View&lt;-&gt;Controller ili\u015fkisi sayesinde kullan\u0131c\u0131dan gelen her t\u00fcrl\u00fc talep, gerekli Controller s\u0131n\u0131f\u0131ndaki Action metodda i\u015fleyi\u015fini g\u00f6rmekte ve sonu\u00e7 geri View(g\u00f6r\u00fcnt\u00fc) taraf\u0131na&#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":[746,313,479,480,283],"class_list":["post-1989","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","tag-asp-net-mvc","tag-attribute","tag-filtreler","tag-kisitlama","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1989","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=1989"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1989\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}