﻿
{"id":2053,"date":"2013-08-31T04:10:15","date_gmt":"2013-08-31T04:10:15","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=2053"},"modified":"2013-08-31T04:10:15","modified_gmt":"2013-08-31T04:10:15","slug":"asp-net-mvcde-exception-filtresi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvcde-exception-filtresi\/","title":{"rendered":"Asp.NET MVC&#8217;de Exception Filtresi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Her t\u00fcrl\u00fc masa\u00fcst\u00fc ya da web yaz\u0131l\u0131mda oldu\u011fu gibi olas\u0131 hata durumlar\u0131yla kar\u015f\u0131la\u015fma pay\u0131 mevcuttur.Bu durumlar server tabanl\u0131, veritaban\u0131 bazl\u0131 ya da programatik mant\u0131k hatalar\u0131 olabilir.Kullan\u0131c\u0131lar bu olas\u0131 hata durumlar\u0131yla kar\u015f\u0131 kar\u015f\u0131ya kald\u0131\u011f\u0131nda elden pek bir \u015fey gelmesi m\u00fcmk\u00fcn de\u011fildir.Bu durumda yapabilece\u011fimiz en g\u00fczel \u015fey, durumu olabildi\u011fince kullan\u0131c\u0131ya izah edebilmektir.Kimi programlama dilleri bu duruma mimarisinde \u00e7\u00f6z\u00fcm sunarken, kimi programlama dillerinde manuel olarak programc\u0131 taraf\u0131ndan \u00e7\u00f6z\u00fcm aran\u0131r.\u0130\u015fte Asp.NET MVC mimarisi b\u00f6yle olas\u0131 hata durumlar\u0131nda kullanabilmemiz i\u00e7in Exception filtresini geli\u015ftirmi\u015f ve biz kullan\u0131c\u0131lar\u0131na sunmu\u015ftur.Bu filtre sayesinde kullan\u0131c\u0131lar\u0131m\u0131za, olas\u0131 hata durumlar\u0131nda hata sayfalar\u0131yla a\u00e7\u0131klama yapabilir ve istedi\u011fimiz \u015fekilde y\u00f6nlendirme i\u015flemini ger\u00e7ekle\u015ftirebiliriz.<br \/>\n<!--more--><br \/>\n<em>\u00d6ncelikle &#8220;<strong>Asp.NET MVC mimarisinde Exception filtresi hangi durumlarda devreye girer?<\/strong>&#8221; sorusunu yan\u0131tlayal\u0131m.<\/em><br \/>\n<em>-&gt; MVC projemiz i\u00e7inde bulunan herhangi bir Action metottan al\u0131nan istinai durum s\u00f6z konusu oldu\u011funda Exception filtresi devreye girmektedir.<\/em><br \/>\n<em>&#8220;<strong>Peki bu Exception diye nitelendirdi\u011fimiz filtrenin kulland\u0131\u011f\u0131 s\u0131n\u0131f\u0131n ad\u0131 nedir?<\/strong>&#8221; sorusuna gelirsek..<\/em><br \/>\n<em>-&gt; MVC mimarisiyle beraber gelen Exception filtresi varsay\u0131lan olarak <strong>HandleError<\/strong> s\u0131n\u0131f\u0131n\u0131 temsil etmektedir.Bu s\u0131n\u0131f ayn\u0131 zamanda bir Attribute s\u0131n\u0131f\u0131d\u0131r.Yani bir niteliktir.<\/em><br \/>\n<em>&#8220;<strong>Son olarak HandleError Attribute(Nitelik)&#8217;unun \u00f6zellikleri nelerdir?<\/strong>&#8220;<\/em><br \/>\n<em>-&gt; \u00c7ok kompleks bir yap\u0131s\u0131 yoktur.<strong>View<\/strong> ve <strong>Master<\/strong> olmak \u00fczere iki tane \u00f6zelli\u011fi mevcuttur.Herhangi bir istisnai durum s\u00f6z konusu oldu\u011fu zaman bu \u00f6zellikler sayesinde i\u015flemlerimizi yapaca\u011f\u0131z.<br \/>\n<span style=\"color: #339966;\">View \u00f6zelli\u011fi;<\/span> Olas\u0131 istisnai durum sonucu filtremiz devreye girerse e\u011fer, hangi View ile \u00e7al\u0131\u015faca\u011f\u0131m\u0131z\u0131 belirtmek i\u00e7indir.Varsay\u0131lan olarak &#8220;Error&#8221; de\u011ferine sahiptir.<br \/>\n<span style=\"color: #339966;\">Master \u00f6zelli\u011fi;<\/span> Olas\u0131 istisnai durum sonucu filtremiz devreye girerse e\u011fer, hangi Master ile \u00e7al\u0131\u015faca\u011f\u0131m\u0131z\u0131 belirtmek i\u00e7indir.Varsay\u0131lan olarak &#8220;_Layout&#8221; de\u011ferine sahiptir.<br \/>\n<\/em><\/p>\n<p>Soru &#8211; Cevap y\u00f6ntemiyle genel bilgilerimizi edindikten sonra filtremiz hakk\u0131nda \u00f6rneklendirme yapabiliriz.<br \/>\nBir Asp.NET MVC projesi a\u00e7al\u0131m ve &#8220;Home(Controller).cs&#8221; isimli Controller katman\u0131m\u0131zda Controller s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<p>\u00d6ncelikle mimarimizde olas\u0131 bir hata durumu yarat\u0131p Exception filtremizi kullanmadan kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z sonucu inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            throw new ExecutionEngineException();\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\u0131m\u0131z i\u00e7inde varsay\u0131lan olarak gelen &#8220;Index&#8221; isimli Action metodumuzun i\u00e7inde &#8220;<strong><em>throw<\/em><\/strong>&#8221; komutuyla &#8220;ExecutionEngineException&#8221; hatas\u0131 f\u0131rlatt\u0131rd\u0131m.Yani bu Action metod tetiklendi\u011fi zaman sayfam\u0131z hata verecektir.(<span style=\"font-size: x-small;\"><em>Not 1: ExecutionEngineException hatas\u0131n\u0131n ne olup olmad\u0131\u011f\u0131 \u00e7ok \u00f6nemli de\u011fildir.Maksat bir hata al\u0131p, al\u0131nan bu hata \u00fczerinden yorumumuzu yapabilmektir.Not 2:throw komutu istisnai durumlar s\u00f6z konusu oldu\u011funda hata f\u0131rlatma komutudur.<\/em><\/span>)<\/p>\n<p>&#8220;Index&#8221; Action metodunun View katman\u0131ndaki g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fcde olu\u015fturduktan sonra projemizi derleyip \u00e7al\u0131\u015ft\u0131ral\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2068\" alt=\"HataSayfasi\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi-300x200.png\" width=\"300\" height=\"200\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi-300x200.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi.png 511w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Yukar\u0131daki g\u00f6r\u00fcnt\u00fcde g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi hata mesaj\u0131n\u0131 alm\u0131\u015f bulunmaktay\u0131z.Evet bundan sonraki as\u0131l i\u015fimiz alaca\u011f\u0131m\u0131z bu hata mesaj\u0131n\u0131 daha g\u00fczel ve kullan\u0131c\u0131ya metinsel olarak ifade edebilen bir hale getirmektir.<\/p>\n<p>\u00d6ncelikle kullan\u0131c\u0131ya olas\u0131 hatam\u0131z\u0131 daha g\u00fczel bir \u015fekilde izah edebilece\u011fimiz sayfam\u0131z\u0131 haz\u0131rl\u0131yoruz.<br \/>\nView katman\u0131ndaki &#8220;<em>Shared<\/em>&#8221; isimli klas\u00f6r alt\u0131na &#8220;HataSayfasi.cshtml&#8221; isimli bir View olu\u015fturup i\u00e7ini a\u015fa\u011f\u0131daki gibi d\u00fczenliyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;h2&gt;Hata Sayfas\u0131&lt;\/h2&gt;\r\nBeklenmedik bir hata olu\u015fmu\u015ftur.L\u00fctfen site y\u00f6neticisiyle irtibata ge\u00e7iniz.\r\n<\/pre>\n<p>Bu i\u015flemi ger\u00e7ekle\u015ftirdikten sonra hangi Action metodumuzda istisnai durumlarda bu hata sayfas\u0131n\u0131 kullanacaksak onu HandleError Attribute&#8217;u ile i\u015faretliyoruz.Haliyle biz bu makalemizde Index Action metodunu i\u015faretleyece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        &#x5B;HandleError(View = &quot;HataSayfasi&quot;)]\r\n        public ActionResult Index()\r\n        {\r\n            throw new ExecutionEngineException();\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, &#8220;Index&#8221; isimli Action metodumuzu HandleError Attribute&#8217;uyla i\u015faretlemi\u015f bulunduk, lakin View \u00f6zelli\u011fine &#8220;HataSayfasi&#8221; de\u011ferini girdik.Bunun sebebi anlayaca\u011f\u0131n\u0131z \u00fczere, varsay\u0131lan &#8220;Error&#8221; sayfas\u0131ndan ziyade bu sayfa \u00fczerinde istisnai durum bilgisini versin diye istedik.<\/p>\n<p>Art\u0131k son yapmam\u0131z gereken ayar ise, web.config dosyam\u0131zda hata sayfas\u0131n\u0131 g\u00f6sterme modunu a\u00e7mam\u0131z gerekmektedir.Bu i\u015flem i\u00e7in,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n  &lt;system.web&gt;\r\n    &lt;customErrors mode=&quot;On&quot;\/&gt;\r\n  &lt;\/system.web&gt;\r\n<\/pre>\n<p>komutunu eklemeniz yeterlidir.<\/p>\n<p>Art\u0131k projemizi derleyip \u00e7al\u0131\u015ft\u0131rabiliriz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2070\" alt=\"HataSayfasi2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi2-300x55.png\" width=\"300\" height=\"55\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi2-300x55.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/08\/HataSayfasi2.png 448w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi istisnai durumda ayarlad\u0131\u011f\u0131m\u0131z sayfayla kullan\u0131c\u0131ya durumu izah edebildik.Tabi siz as\u0131l projelerinizde g\u00f6ze hitap eden tasar\u0131mlar\u0131n\u0131zla ve uygun \u00fcslubunuzla hatay\u0131 ifade etmeyi unutmay\u0131n. \ud83d\ude42<\/p>\n<p>Manuel olu\u015fturdu\u011fumuz &#8220;HataSayfasi&#8221; isimli hata sayfam\u0131zda <em>Exception<\/em> nesnemizi kullanarak, terminolojikte olsa kullan\u0131c\u0131ya daha detayl\u0131 bilgi arzedebiliriz.<\/p>\n<p>\u00d6ncelikle Exception nesnemizin \u00f6zelliklerini inceleyelim, ard\u0131ndan \u00f6rnek bir kullan\u0131m\u0131n\u0131 g\u00f6rece\u011fiz.<\/p>\n<ul style=\"list-style-type: circle;\">\n<li><strong>Message<\/strong> : \u0130stisnai durum a\u00e7\u0131klamas\u0131n\u0131 verir.<\/li>\n<li><strong>Source<\/strong> : Olas\u0131 hatan\u0131n al\u0131nd\u0131\u011f\u0131 s\u0131n\u0131f ya da nesne bilgilerini i\u00e7erir.<\/li>\n<li><strong>TargetSite<\/strong> : \u0130stisnai durumun verildi\u011fi metod hakk\u0131nda bilgi verir.<\/li>\n<li><strong>StackTrace<\/strong> : Hataya neden olan \u00e7a\u011fr\u0131lar\u0131 i\u00e7eren stack(y\u0131\u011f\u0131n) bilgisini i\u00e7erir.<\/li>\n<li><strong>InnerException<\/strong> : Olu\u015fan di\u011fer i\u00e7 hatalar\u0131 yakalamak amac\u0131yla kullan\u0131l\u0131r.E\u011fer hi\u00e7 bir i\u00e7 hata olu\u015fmazsa &#8220;null&#8221; de\u011ferini ta\u015f\u0131yacakt\u0131r.<\/li>\n<\/ul>\n<p>\u00d6rnek olarak a\u015fa\u011f\u0131daki kodu inceleyelim,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;h2&gt;Hata Sayfas\u0131&lt;\/h2&gt;\r\nHata A\u00e7\u0131klamas\u0131&lt;br \/&gt;\r\n@Model.Exception.Message\r\nHata \u0130\u00e7erikleri&lt;br \/&gt;\r\n@Model.Exception.StackTrace\r\n<\/pre>\n<p>E\u011fer projeyi derleyip \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z hayatla ilgili detayl\u0131 bilgileri ekrana sunmu\u015f olacaks\u0131n\u0131z.<\/p>\n<p>Son olarak,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        &#x5B;HandleError(ExceptionType = typeof(ExecutionEngineException), View = &quot;HataSayfasi&quot;)]\r\n        public ActionResult Index()\r\n        {\r\n            throw new ExecutionEngineException();\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>yukar\u0131daki gibi Attribute&#8217;umuzu kullan\u0131rsak, &#8220;ExceptionType&#8221; \u00f6zelli\u011fine vermi\u015f oldu\u011fumuz referans tipteki istisnai durumlar\u0131n yakalanmas\u0131n\u0131 sa\u011flam\u0131\u015f oluruz.Farkl\u0131 hata durumlar\u0131nda filtremiz i\u015fleve girmeyecek ve kullan\u0131c\u0131lar\u0131m\u0131z server\u0131n o leziz hata sayfas\u0131yla ba\u015f ba\u015fa kalacakt\u0131r.<\/p>\n<p>Exception filtresi sayesinde, olas\u0131 hata durumlar\u0131 i\u00e7in manuel olarak Attribute yazma i\u015fleminden kurtuluyor ve esnek bir \u00e7al\u0131\u015fma sergileyebiliyoruz.Hatas\u0131z projelere imza atman\u0131z dile\u011fiyle.. \ud83d\ude42<\/p>\n<p>\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 t\u00fcrl\u00fc masa\u00fcst\u00fc ya da web yaz\u0131l\u0131mda oldu\u011fu gibi olas\u0131 hata durumlar\u0131yla kar\u015f\u0131la\u015fma pay\u0131 mevcuttur.Bu durumlar server tabanl\u0131, veritaban\u0131 bazl\u0131 ya da programatik mant\u0131k hatalar\u0131 olabilir.Kullan\u0131c\u0131lar bu olas\u0131 hata durumlar\u0131yla kar\u015f\u0131 kar\u015f\u0131ya kald\u0131\u011f\u0131nda elden&#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,489,491,490,283],"class_list":["post-2053","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","category-mvc-4-0","tag-asp-net-mvc","tag-exception","tag-filtre","tag-handleerror","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2053","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=2053"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/2053\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=2053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=2053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=2053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}