﻿
{"id":5260,"date":"2016-10-27T14:03:36","date_gmt":"2016-10-27T14:03:36","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5260"},"modified":"2016-10-27T14:03:36","modified_gmt":"2016-10-27T14:03:36","slug":"asp-net-mvcde-httphandler-olusturma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvcde-httphandler-olusturma\/","title":{"rendered":"Asp.NET MVC&#8217;de HttpHandler Olu\u015fturma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Asp.NET MVC projelerinde gelen \u00e7o\u011fu talebi Controller katman\u0131nda kar\u015f\u0131lamakta ve kullan\u0131c\u0131ya gerekli \u00e7\u0131kt\u0131y\u0131 View katman\u0131nda g\u00f6stermekteyiz. Haliyle amac\u0131m\u0131z ne olursa olsun gelecek t\u00fcm talepleri kar\u015f\u0131layabilmek i\u00e7in birer Controller ve View&#8217;e ihtiyac\u0131m\u0131z olmaktad\u0131r. Genel ge\u00e7er al\u0131\u015fkanl\u0131klar bizi fark\u0131nda olmadan b\u00f6yle \u015fartland\u0131rm\u0131\u015f olsada ger\u00e7ekte hi\u00e7te b\u00f6yle bir zorunluluk bulunmamaktad\u0131r. Bu i\u00e7eri\u011fimizde Asp.NET ve Asp.NET MVC mimarilerinde t\u00fcm Page, Controller ve HttpHandler&#8217;lar\u0131 kapsayan ve yap\u0131lan t\u00fcm taleplerin tetikledi\u011fi IHttpHandler aray\u00fcz\u00fc taraf\u0131ndan bir HttpHandler olu\u015fturmay\u0131 ve bu Handler&#8217;a bir route ayarlamay\u0131 g\u00f6rece\u011fiz. \u0130\u015fte bu IHttpHandler aray\u00fcz\u00fc sayesinde Controller ve View&#8217;e ihtiya\u00e7 duymaks\u0131z\u0131n gelen talepleri kar\u015f\u0131layacak, ard\u0131ndan kullan\u0131c\u0131lara gerekli sonu\u00e7lar g\u00f6sterilebilecektir.<\/p>\n<p>Daha fazla uzatmadan \u00f6rnek bir Asp.NET MVC projesi a\u00e7arak hayali bir senaryoda konuya direkt giri\u015f yapmak istiyorum.<\/p>\n<p>\u015eimdi a\u015fa\u011f\u0131daki &#8220;OrnekRouteHandler.cs&#8221; isimli s\u0131n\u0131f\u0131 inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class OrnekRouteHandler : IRouteHandler\r\n    {\r\n        public IHttpHandler GetHttpHandler(RequestContext requestContext)\r\n        {\r\n            return new OrnekHandler(requestContext);\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;OrnekRouteHandler&#8221; s\u0131n\u0131f\u0131 &#8220;IRouteHandler&#8221; interfaceini uygulayan bir s\u0131n\u0131ft\u0131r ve birazdan olu\u015fturaca\u011f\u0131m\u0131z route \u015femas\u0131na talep g\u00f6nderildi\u011fi zaman tetiklenecektir. Dikkat ederseniz bu tetiklenme neticesinde &#8220;OrnekHandler&#8221; s\u0131n\u0131f\u0131ndan bir nesne olu\u015fturmakta ve geriye return etmektedir. \u015eimdi bu s\u0131n\u0131f\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class OrnekHandler : IHttpHandler\r\n    {\r\n        public RequestContext RequestContext { get; set; }\r\n        public OrnekHandler() { }\r\n        public OrnekHandler(RequestContext RequestContext) { this.RequestContext = RequestContext; }\r\n        public bool IsReusable { get; }\r\n\r\n        public void ProcessRequest(HttpContext context)\r\n        {\r\n            \/\/Gelen talebin i\u015flenmesi\/i\u015flemleri\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;OrnekHandler&#8221; s\u0131n\u0131f\u0131 ise &#8220;IHttpHandler&#8221; interfaceini uygulayan bir s\u0131n\u0131ft\u0131r. Route \u015femas\u0131na gelen talebi kar\u015f\u0131layacak olan &#8220;OrnekRouteHandler&#8221; s\u0131n\u0131f\u0131n\u0131n prosed\u00fcrel i\u015flemlerini \u00fcstlenen &#8220;OrnekHandler&#8221; s\u0131n\u0131f\u0131, i\u00e7erisinde \u00f6rne\u011fi olu\u015fturuldu\u011fu &#8220;OrnekRouteHandler&#8221; s\u0131n\u0131f\u0131ndan g\u00f6nderilmi\u015f ve constructer taraf\u0131ndan elde edilen RequestContext nesnesini kullanarak &#8220;ProcessRequest&#8221; metodu i\u00e7erisinde yap\u0131lan talebin kayna\u011f\u0131 hakk\u0131nda yahut ba\u015fka durumlara \u00f6zel i\u015flemler ger\u00e7ekle\u015ftirebilmektedir.<\/p>\n<p>\u015eunu s\u00f6ylemekte fayda var ki, birazdan olu\u015fturaca\u011f\u0131m\u0131z route \u015femas\u0131n\u0131 tetikledi\u011fimiz anda Controller ve View olmaks\u0131z\u0131n &#8220;ProcessRequest&#8221; metodu tetiklenecek ve istenen ne ise \u00e7\u0131kt\u0131 olarak elde edilecektir.<\/p>\n<p>\u015eimdide bu ad\u0131mda route \u015femam\u0131z\u0131 olu\u015ftural\u0131m. &#8220;App_Start&#8221; klas\u00f6r\u00fc alt\u0131ndaki &#8220;RouteConfig.cs&#8221; dosyas\u0131na a\u015fa\u011f\u0131daki gibi bir route ekliyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class RouteConfig\r\n    {\r\n        public static void RegisterRoutes(RouteCollection routes)\r\n        {\r\n            routes.IgnoreRoute(&quot;{resource}.axd\/{*pathInfo}&quot;);\r\n\r\n            routes.Add(new Route(&quot;laylaylom&quot;, new OrnekRouteHandler()));\r\n\r\n            routes.MapRoute(\r\n                name: &quot;Default&quot;,\r\n                url: &quot;{controller}\/{action}\/{id}&quot;,\r\n                defaults: new { controller = &quot;Home&quot;, action = &quot;Index&quot;, id = UrlParameter.Optional }\r\n            );\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet, dikkat ederseniz &#8220;laylaylom&#8221; diyerek sallad\u0131\u011f\u0131m bir route \u015femas\u0131 belirlemi\u015f olduk. \u015eimdi gelin projemizi derleyip \u00e7al\u0131\u015ft\u0131ral\u0131m ve &#8220;laylaylom&#8221; linkine bir talepte bulunal\u0131m.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/XGFB5RvEITI\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Yukar\u0131daki videodan da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;ProcessRequest&#8221; talep neticesinde \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<p>Peki, \u015fimdi sayfam\u0131zda herhangi bir \u00e7\u0131kt\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\n        public void ProcessRequest(HttpContext context)\r\n        {\r\n            HttpContext.Current.Response.Write(&quot;Laylaylom galiba sana g\u00f6re sevmeler&quot;);\r\n        }\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Yeniden projemizi derleyip \u00e7al\u0131\u015ft\u0131ral\u0131m. Muhtemelen a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcndeki gibi bir sonu\u00e7la kar\u015f\u0131la\u015facaks\u0131n\u0131z.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/Asp.NET-MVCde-HttpHandler-Olu\u015fturma.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5278\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/10\/Asp.NET-MVCde-HttpHandler-Olu\u015fturma.png\" alt=\"Asp.NET MVC'de HttpHandler Olu\u015fturma\" width=\"288\" height=\"81\" \/><\/a><\/p>\n<p>Evet, g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ne Controller ne de View katmanlar\u0131na elimizi s\u00fcrmeden talepleri i\u015fleyebildik. IHttpHandler aray\u00fcz\u00fc bizlere serverda yap\u0131lacak salt i\u015flemleri bu \u015fekilde az maliyetle kar\u015f\u0131lamam\u0131z\u0131 sa\u011flayan bir yap\u0131 sunmaktad\u0131r. Anla\u015f\u0131lan taleplerin kullan\u0131c\u0131 iste\u011finden \u00e7ok, sayfa y\u00fcklemeleri ve sistem gereksinimlerinden kaynakland\u0131\u011f\u0131 durumlarda kullan\u0131labilecek bir y\u00f6ntemdir diyebiliriz. \u00d6rne\u011fin; dinamik olarak boyutland\u0131r\u0131lan resimleri Controller&#8217;da i\u015fleyip View&#8217;de &lt;a href=&#8221;&#8230;&#8221;&gt;&#8230;&lt;\/a&gt; tag\u0131n\u0131 kullanarak yay\u0131nlamaktansa bu talebi \u00f6zel bir route \u015femas\u0131n\u0131 tetikleterek \u00f6zel bir Handler \u00fczerinde yapmak ve d\u00f6nen sonucun ContentType \u00f6zelli\u011fini resim olarak ayarlamak daha teknik ve makul bir yakla\u015f\u0131m olabilir&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/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>Merhaba, Asp.NET MVC projelerinde gelen \u00e7o\u011fu talebi Controller katman\u0131nda kar\u015f\u0131lamakta ve kullan\u0131c\u0131ya gerekli \u00e7\u0131kt\u0131y\u0131 View katman\u0131nda g\u00f6stermekteyiz. Haliyle amac\u0131m\u0131z ne olursa olsun gelecek t\u00fcm talepleri kar\u015f\u0131layabilmek i\u00e7in birer Controller ve View&#8217;e ihtiyac\u0131m\u0131z olmaktad\u0131r. Genel&#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":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,600,345],"tags":[745,746,1532,1530,1529,1531,283],"class_list":["post-5260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-mvc","category-asp-net-mvc-5","category-mvc-4-0","tag-asp-net","tag-asp-net-mvc","tag-handler","tag-httphandler","tag-ihttphandler","tag-iroutehandler","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5260","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=5260"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5260\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}