﻿
{"id":1467,"date":"2013-03-16T23:50:37","date_gmt":"2013-03-16T23:50:37","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1467"},"modified":"2013-03-16T23:50:37","modified_gmt":"2013-03-16T23:50:37","slug":"mvc-4-0-url-routing-yapisi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvc-4-0-url-routing-yapisi\/","title":{"rendered":"MVC 4.0 URL Routing Yap\u0131s\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>\u00d6nceki yaz\u0131lar\u0131mda yap\u0131sal olarak URL Routing(URL Y\u00f6nlendirme) sistemine de\u011finmi\u015ftim.Bu yaz\u0131mda ise, farkl\u0131 \u00f6zellikleriyle, Asp.NET MVC 4.0 mimarisine uygun bir bi\u00e7imde URL Routing yap\u0131s\u0131n\u0131 irdeleyece\u011fiz.<br \/>\n<!--more--><br \/>\nBu makalede, terminolojik terimlerin lugattaki bildi\u011fimiz isimlerinden ziyade a\u00e7\u0131klamalar\u0131n\u0131 yaparak konuya giri\u015f yapmak istiyorum.<br \/>\n<em><strong>URL Nedir?<\/strong><\/em><br \/>\nWeb sayfalar\u0131na ula\u015fabilmek i\u00e7in, serverdaki fiziki dosyas\u0131n\u0131n yolunun yap\u0131salla\u015ft\u0131r\u0131lm\u0131\u015f bi\u00e7imidir.<br \/>\nA\u015fa\u011f\u0131daki URL yap\u0131s\u0131n\u0131 inceleyiniz.<br \/>\n<em>http:\/\/www.domainadi.com\/Belgeler\/Dokuman.aspx<\/em>?ID=2<\/p>\n<p>Yukar\u0131daki URL yap\u0131s\u0131n\u0131 inceledi\u011finizde, web sitesinin bulundu\u011fu serverdaki dosyan\u0131n, fiziki yolunu \u00e7ok rahat bir \u015fekilde g\u00f6rmekteyiz.<\/p>\n<p>Bir web projesinde URL yap\u0131lar\u0131n\u0131n i\u00e7eri\u011fe uygun, anlaml\u0131 ve kullan\u0131c\u0131lar taraf\u0131ndan okunabiliyor olmas\u0131na \u00f6zen g\u00f6sterilmelidir.<br \/>\nBu \u015fart SEO prensiplerinin temel kurallar\u0131ndand\u0131r.Arama motorlar\u0131 optimizisyonu s\u0131ras\u0131nda okunabilir URL yap\u0131lar\u0131, sitenizi \u00fcst s\u0131ralara \u00e7\u0131karacakt\u0131r.<\/p>\n<p>URL Routing sistemi sayesinde, yukar\u0131da \u00f6rneklendirdi\u011fimiz URL yap\u0131s\u0131 a\u015fa\u011f\u0131daki gibi okunakl\u0131 hale getirilip SEO tabanl\u0131 link sistemi kurmam\u0131z\u0131 sa\u011flamaktad\u0131r.<\/p>\n<p>http:\/\/www.domainadi.com\/Belgeler\/Dokuman\/2<\/p>\n<p>O halde \u015fimdi Routing kelimesini a\u00e7\u0131klayal\u0131m.<\/p>\n<p><em><strong>Routing(Y\u00f6nlendirme) Nedir?<\/strong><\/em><br \/>\nYap\u0131sal olarak farkl\u0131 olan URL kaynaklar\u0131n\u0131 birle\u015ftiren bir sistemdir diyebiliriz.\u00d6rnek olarak a\u015fa\u011f\u0131daki iki farkl\u0131 URL yi inceleyiniz.<\/p>\n<div align=\"center\">\n<table style=\"width: 60%;\">\n<tbody>\n<tr>\n<td align=\"center\"><strong>Standart URL<\/strong><\/td>\n<td align=\"center\"><strong>URL Routing ile Y\u00f6nlendirilmi\u015f URL<\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\">http:\/\/www.bilmemne.com\/yazilar\/yazi.aspx?id=2<\/td>\n<td align=\"center\">http:\/\/www.bilmemne.com\/yazilar\/yazi\/2<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Yukar\u0131daki URL yap\u0131lar\u0131n\u0131 incelerseniz e\u011fer, soldaki yap\u0131 &#8220;yazilar&#8221; dizininin i\u00e7indeki &#8220;yazi.aspx&#8221; dosyas\u0131na eri\u015fim sa\u011flamaktad\u0131r ve parametre olarak &#8220;2&#8221; de\u011ferini ta\u015f\u0131maktad\u0131r.Yukar\u0131larda, kullan\u0131c\u0131lar taraf\u0131ndan okunakl\u0131 link yap\u0131s\u0131ndan s\u00f6z etmi\u015ftik.Ancak bu link yap\u0131s\u0131nda &#8220;?&#8221; gibi karakterler mevcut ve parametre ad\u0131 olarak &#8220;id&#8221; ismi bulunmaktad\u0131r.Bu link yap\u0131s\u0131 g\u00fcvenlik a\u00e7\u0131s\u0131ndan <a href=\"http:\/\/www.gencayyildiz.com\/blog\/ado-net-connected-mimari-sql-injection\/\" target=\"_blank\">SQL Injection<\/a>\u00a0a\u00e7\u0131\u011f\u0131na yakalanmam\u0131za sebep olabilir.Ayr\u0131ca, &#8220;yazilar dizisi i\u00e7inde, yazi.aspx sayfas\u0131na, id de\u011feri 2 olan yaz\u0131y\u0131 getir&#8221; gibisinden bir okuma yapabiliriz.Ama bu hi\u00e7te tutarl\u0131 de\u011fil.<\/p>\n<p>Sa\u011fdaki URL yap\u0131s\u0131n\u0131 incelersek e\u011fer, &#8220;yazilar&#8221; dizininin i\u00e7inde ki &#8220;yazi&#8221; dizininden &#8220;2&#8221; de\u011ferine sahip olan dosyaya URL Routin mekanizmas\u0131yla eri\u015fim sa\u011flanmaktad\u0131r.Bu iki link yap\u0131s\u0131 ayn\u0131 proje i\u00e7inde kullan\u0131labilir.Sanmay\u0131n ki, URL Routing yap\u0131s\u0131yla y\u00f6nlendirilmi\u015f linki uygulamak i\u00e7in projelerimizde diziler olu\u015fturup i\u00e7lerine dosyalar\u0131m\u0131z\u0131 koyaca\u011f\u0131z.Soldaki standart URL yap\u0131m\u0131z, bu yap\u0131m\u0131za URL Routing mekanizmas\u0131 ile y\u00f6nlendiriliyor ve linksel g\u00fcvenlik a\u00e7\u0131\u011f\u0131 s\u00f6z konusu olmadan, SEO tabanl\u0131 URL olu\u015fturulmu\u015f oluyor.<\/p>\n<p>Gelelim MVC mimarisinde URL Routing mekanizmas\u0131na.Asp.NET mimarisinde URL Routing mekanizmas\u0131 yukar\u0131da bahsetti\u011fimiz gibi \u00e7al\u0131\u015fmaktad\u0131r.MVC mimarisinde ise, Standart URL bulunmamaktad\u0131r.Bilakis y\u00fczde y\u00fcz URL Routing alt yap\u0131l\u0131 bir mimaridir.Tabi i\u015fin i\u00e7ine MVC&#8217;de Controller, Action gibi konular girdi\u011finden dolay\u0131, Routing mekanizmas\u0131yla \u00fcretilmi\u015f URL&#8217;imizde ki dizi mant\u0131\u011f\u0131 bu terimlerle birle\u015fmektedir.<\/p>\n<p>MVC mimarisinin sistem i\u015fleyi\u015fini hat\u0131rlarsak e\u011fer, kullan\u0131c\u0131 taraf\u0131ndan gelen bir istek \u00fczerine Controller katman\u0131ndaki ilgili s\u0131n\u0131f\u0131m\u0131zda ki ilgili Action metodumuz \u00e7al\u0131\u015f\u0131yordu.Sistem hangi Controller s\u0131n\u0131f\u0131nda hangi Action metodunu \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131 URL yap\u0131s\u0131ndan anl\u0131yordu.\u00d6rnek olarak a\u015fa\u011f\u0131daki linki inceleyelim.<\/p>\n<p>http:\/\/www.bilmemne.com\/Home\/Index<\/p>\n<p>Linkte g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere k\u0131rm\u0131z\u0131 renkle i\u015faretlendirilmi\u015f olan &#8220;Home&#8221; dizisi ilgili Controller s\u0131n\u0131f\u0131m\u0131z\u0131 g\u00f6sterirken, mor renkle i\u015faretlendirilmi\u015f &#8220;Index&#8221; dizisi ise, &#8220;Home(Controller).cs&#8221; s\u0131n\u0131f\u0131m\u0131zdaki Action metodumuzu g\u00f6stermektedir.Bu link tetiklendi\u011fi zaman ilgili Controller s\u0131n\u0131f\u0131 ve Action metod \u00e7al\u0131\u015ft\u0131r\u0131lm\u0131\u015f olacakt\u0131r<\/p>\n<p>\u015eimdi Visual Studio 2012 derleyicisinde bir MVC Razor mimarisinde proje olu\u015ftural\u0131m.MVC uygulamalar\u0131nda URL Routing yap\u0131s\u0131 Global.asax dosyas\u0131 i\u00e7erisinde tan\u0131mlanmaktad\u0131r.Ancak Visual Studio 2012 derleyicisi hiyerar\u015fik bir sistem in\u015fa ederek bu yap\u0131y\u0131 farkl\u0131 katmanlara b\u00f6lm\u00fc\u015ft\u00fcr.Olu\u015fturdu\u011fumuz projenin Solution Explorer penceresini incelersek e\u011fer, &#8220;App_Start&#8221; dizisi bulunmaktad\u0131r.Bu dizi alt\u0131nda &#8220;RouteConfig.cs&#8221; isimli bir s\u0131n\u0131f bulunmaktad\u0131r.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/mvc-4-0-url-routing-yapisi\/url-routing\/\" rel=\"attachment wp-att-1486\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1486\" alt=\"URL Routing\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2013\/03\/URL-Routing.png\" width=\"277\" height=\"177\" \/><\/a><\/p>\n<p>URL Routing konfig\u00fcrasyonu bu dosya alt\u0131nda yap\u0131lmaktad\u0131r.\u015eimdi bu dosyan\u0131n yap\u0131s\u0131n\u0131 inceleyelim.<\/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            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>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer, &#8220;RouteConfig&#8221; isminde bir s\u0131n\u0131f bulunmaktad\u0131r ve bu s\u0131n\u0131f i\u00e7inde, geriye de\u011fer d\u00f6nd\u00fcrmeyen, &#8220;RouteCollection&#8221; tipinde parametre alan, static yap\u0131da &#8220;RegisterRoutes&#8221; isimli metod mevcuttur.Bu metod i\u00e7inde &#8220;routes&#8221; isimli parametrenin &#8220;MapRoute&#8221; metodunu kullanarak URL Routing \u015femas\u0131 \u00e7izilmi\u015ftir.<\/p>\n<p>Bu URL Routing \u015femas\u0131n\u0131n, ad\u0131 &#8220;Default&#8221;, URL yap\u0131s\u0131 &#8220;{controller}\/{action}\/{id}&#8221; ve son olarak default(varsay\u0131lan) de\u011ferleri ise &#8220;controller i\u00e7in &#8216;Home&#8221;, action i\u00e7in &#8216;Index&#8217; ve parametre i\u00e7in UrlParameter.Optional&#8221; olarak tan\u0131mlanm\u0131\u015f.Burada dikkat etmemiz gereken m\u00fchim nokta, s\u00fcsl\u00fc parantezler({ }) i\u00e7ine verilen isimlerden &#8220;controller&#8221; ve &#8220;action&#8221; ismi sabittir.De\u011fi\u015ftirilemezler!!!<\/p>\n<p>\u015eimdi bu &#8220;RouteConfig&#8221; s\u0131n\u0131f\u0131n\u0131n i\u00e7inde bulunan &#8220;RegisterRoutes&#8221; URL yap\u0131s\u0131n\u0131 Global.asax dosyas\u0131na nas\u0131l entegre edebiliriz, inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class MvcApplication : System.Web.HttpApplication\r\n    {\r\n        protected void Application_Start()\r\n        {\r\n            AreaRegistration.RegisterAllAreas();\r\n            WebApiConfig.Register(GlobalConfiguration.Configuration);\r\n            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);\r\n            RouteConfig.RegisterRoutes(RouteTable.Routes);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz kod blo\u011fu, projemizde ki &#8220;Global.asax&#8221; dosyas\u0131n\u0131n i\u00e7eri\u011fidir.Dikkat ederseniz e\u011fer, &#8220;RouteConfig.RegisterRoutes(RouteTable.Routes)&#8221; kodu ile yukar\u0131daki s\u0131n\u0131f\u0131m\u0131z\u0131 entegre etmi\u015f oluyoruz.<\/p>\n<p><em><strong>Varsay\u0131lan URL Routing Ayarlar\u0131<\/strong><\/em><br \/>\nVisual Studio derleyicisinde, yeni bir MVC uygulamas\u0131 a\u00e7arsak e\u011fer, Global.asax dosyas\u0131nda varsay\u0131lan de\u011ferlerin atand\u0131\u011f\u0131n\u0131 g\u00f6rmekteyiz.(Tabi biz bu makalemizde Visual Studio 2012 modelini kulland\u0131\u011f\u0131m\u0131zdan dolay\u0131, &#8220;App_Start&#8221; dizini i\u00e7erisindeki &#8220;RouteConfig&#8221; s\u0131n\u0131f\u0131ndan bahsetmi\u015f oluyoruz.)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\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<\/pre>\n<p>Yukar\u0131daki kod blo\u011fu, yeni a\u00e7\u0131lan bir MVC projesinin &#8220;RouteConfig&#8221; s\u0131n\u0131f\u0131ndaki varsay\u0131lan i\u00e7eriklerdir.G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere, varsay\u0131lan olarak Controller &#8220;Home&#8221; ve varsay\u0131lan olarak Action ise &#8220;Index&#8221; se\u00e7ilmi\u015ftir.Parametremize varsay\u0131lan olarak opsiyonel bir de\u011fer atanm\u0131\u015f.<\/p>\n<p>Burada \u00f6rneklendirme yapmak i\u00e7in, \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projeye\u00a0&#8220;A(Controller).cs&#8221; ve \u00a0&#8220;Home(Controller).cs&#8221;\u00a0 isimlerinde iki Controller olu\u015ftural\u0131m ve olu\u015fturdu\u011fumuz &#8220;A(Controller).cs&#8221;\u00a0Controller s\u0131n\u0131f\u0131n\u0131n i\u00e7ine &#8220;Ornek&#8221; ad\u0131nda bir Action metod ve \u00a0&#8220;Home(Controller).cs&#8221; Controller s\u0131n\u0131f\u0131n\u0131n i\u00e7ine de &#8220;Index&#8221; ad\u0131nda bir Action metod\u00a0olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class AController : Controller\r\n    {\r\n        public ActionResult Ornek()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\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            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdi projemizde &#8220;A(Controller).cs&#8221; Controller s\u0131n\u0131f\u0131n\u0131n i\u00e7indeki &#8220;Ornek&#8221; isimli Action metoda talep g\u00f6ndermek istiyorsak a\u015fa\u011f\u0131daki gibi bir link yap\u0131s\u0131n\u0131 tetiklememiz gerekiyor.<\/p>\n<div align=\"center\">http:\/\/www.bilmemne.com\/<strong>A<\/strong>\/<strong>Ornek<\/strong><\/div>\n<p>E\u011fer projemizde bu tarz link yap\u0131s\u0131 tetiklenirse, &#8220;A(Controller).cs&#8221; ismindeki Controller s\u0131n\u0131f\u0131m\u0131z\u0131n &#8220;Ornek&#8221; isimli Action metodu \u00e7al\u0131\u015ft\u0131r\u0131lm\u0131\u015f olacakt\u0131r.<\/p>\n<p>E\u011fer a\u015fa\u011f\u0131daki Global.asax dosyas\u0131ndaki URL \u015femas\u0131na uygun bir \u015fekilde olmadan, Controller ve Action metodlar\u0131n\u0131n olmad\u0131\u011f\u0131 URL yap\u0131s\u0131 tetiklenirse &#8220;Home(Controller).cs&#8221; ad\u0131ndaki Controller&#8217;\u0131m\u0131z\u0131n i\u00e7indeki &#8220;Index&#8221; isimli Action metod \u00e7al\u0131\u015facakt\u0131r.\u00d6rnek olarak;<\/p>\n<div align=\"center\">http:\/\/www.bilmemne.com<\/div>\n<p><em><strong>Yeni Bir URL Yap\u0131s\u0131 Tan\u0131mlarken Dikkat Edilmesi Gereken Kurallar<\/strong><\/em><br \/>\nURL yap\u0131s\u0131 tan\u0131mlarken belli ba\u015fl\u0131 \u00fc\u00e7 tane kural mevcuttur.Bunlardan biri,<br \/>\nGlobal.asax dosyam\u0131zda yeni bir URL yap\u0131s\u0131 tasarlayacaksak e\u011fer, varsay\u0131lan olarak gelen &#8220;Default&#8221; ismine sahip Route&#8217;tan \u00f6nce tan\u0131mlanmas\u0131 gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n  routes.MapRoute(\r\n                name: &quot;OrnekRoute&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\/\/Do\u011frusu &quot;Default&quot; Route'tan \u00f6nce tan\u0131mlamakt\u0131r.\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<\/pre>\n<p>Bu kural katiyen \u00e7ok \u00f6nemlidir.Aksi taktirte &#8220;Default&#8221; Route \u00e7al\u0131\u015facak ve kendi tasarlad\u0131\u011f\u0131m\u0131z Route yap\u0131s\u0131ndaki linkler patlayacakt\u0131r.<br \/>\nBir di\u011fer kural\u0131m\u0131z ise,<br \/>\nURL yap\u0131s\u0131nda s\u00fcsl\u00fc parantezler({..}) ile belirtti\u011fimiz parametreler arada en az bir karakter olmad\u0131\u011f\u0131 zaman tan\u0131mlanamazlar.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{Ogrenci}{ID}\r\n<\/pre>\n<p>Yanl\u0131\u015f bir tan\u0131mlamad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{Kategori}\/{ID}\r\n{Kategori}.{ID}\r\n{Kategori}kategori{ID}\r\n{Kategori}-{ID}\r\n<\/pre>\n<p>Do\u011fru tan\u0131mlamalard\u0131r.<br \/>\nSon kural\u0131m\u0131z ise,<br \/>\nURL yap\u0131s\u0131 tan\u0131mlan\u0131rken, Route ad\u0131 benzersiz olmal\u0131d\u0131r.<br \/>\nAyn\u0131 isimde birden fazla URL yap\u0131s\u0131 tekrarlan\u0131rsa proje hata verecektir.<br \/>\n<em><strong>D\u00fczenli \u0130fadeler Kullanarak K\u0131s\u0131tlama Olu\u015fturma<\/strong><\/em><br \/>\nBu konuyu irdelemek i\u00e7in a\u015fa\u011f\u0131daki \u00f6rnek Route&#8217;u inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            routes.MapRoute(\r\n            name: &quot;Arsiv&quot;,\r\n            url: &quot;{controller}\/{action}\/{tarih}&quot;,\r\n            defaults: new { controller = &quot;Tarih&quot;, action = &quot;Arsiv&quot;, tarih = &quot;&quot; }\r\n            );\r\n<\/pre>\n<p>Yukar\u0131daki Route yap\u0131s\u0131n\u0131 incelerseniz e\u011fer, &#8220;Tarih&#8221; ad\u0131nda bir Controller s\u0131n\u0131f\u0131m\u0131z ve bu Controller i\u00e7inde &#8220;Arsiv&#8221; ad\u0131nda bir Action metodumuz oldu\u011fu net bir \u015fekilde anla\u015f\u0131lmaktad\u0131r.<\/p>\n<p>Varsayal\u0131m ki, <span style=\"font-size: x-small;\"><strong><em>http:\/\/www.bilmemne.com\/Tarih\/Arsiv\/09.05.1992<\/em><\/strong><\/span> yap\u0131s\u0131ndaki bir link tetiklendi\u011fi anda, do\u011fal olarak &#8220;Tarih(Controller).cs&#8221; ismindeki Controller s\u0131n\u0131f\u0131m\u0131z ve onun i\u00e7indeki &#8220;Arsiv&#8221; ismindeki Action metodumuz tetiklenecektir.\u0130\u015flevsellik olarak bu s\u00fcrecin bizlere 09.05.1992 tarihindeki verileri listeletece\u011fini varsayal\u0131m.Yani parametre olarak tarihsel tipte bir de\u011fer girmemiz gerekti\u011finin fark\u0131na varm\u0131\u015fs\u0131n\u0131zd\u0131r san\u0131r\u0131m.<\/p>\n<div align=\"center\">\n<table style=\"width: 60%;\">\n<tbody>\n<tr>\n<td align=\"center\"><strong>http:\/\/www.bilmemne.com\/Tarih\/Arsiv\/14.03.2013<\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\">E\u011fer bu link yap\u0131s\u0131 tetiklenirse sorun yoktur.<\/td>\n<\/tr>\n<tr>\n<td align=\"center\"><strong>http:\/\/www.bilmemne.com\/Tarih\/Arsiv\/ahmet<\/strong><\/td>\n<\/tr>\n<tr>\n<td align=\"center\">Ancak bu link yap\u0131s\u0131 tetiklendi\u011fi zaman, parametre olarak tarihsel bir de\u011fer almam\u0131\u015f ancak URL yap\u0131s\u0131 olarak &#8220;Arsiv&#8221; ad\u0131ndaki Route yap\u0131s\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ran bir link olacakt\u0131r.Haliyle i\u015flevsel olarak yanl\u0131\u015f formatta gelen de\u011fer oldu\u011fundan dolay\u0131 hata verecektir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Bu durumu engellemek i\u00e7in d\u00fczenleyici ifadeleri kullanmal\u0131y\u0131z.E\u011fer gelen parametrenin de\u011feri tarih format\u0131ndaysa, &#8220;Arsiv&#8221; ad\u0131ndaki Route \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r.Aksi taktirde \u00e7al\u0131\u015fmayacak veyahut ba\u015fka Route yap\u0131lar\u0131 incelenecektir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            routes.MapRoute(\r\n            name: &quot;Arsiv&quot;,\r\n            url: &quot;{controller}\/{action}\/Tarih\/{tarih}&quot;,\r\n            defaults: new { controller = &quot;Tarih&quot;, action = &quot;Arsiv&quot;, tarih = &quot;&quot; },\r\n            constraints: new { tarih = @&quot;\\d{2}.\\d{2}.\\d{4}&quot; }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, d\u00fczenli yap\u0131larla hangi formatta de\u011fi\u015fken de\u011feri al\u0131naca\u011f\u0131n\u0131 bildirmi\u015f olduk.<\/p>\n<p>Bu yaz\u0131m\u0131z\u0131da burada sonland\u0131r\u0131yoruz.<br \/>\nFaydalanman\u0131z dile\u011fiyle..<br \/>\n\u0130yi \u00c7al\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>\u00d6nceki yaz\u0131lar\u0131mda yap\u0131sal olarak URL Routing(URL Y\u00f6nlendirme) sistemine de\u011finmi\u015ftim.Bu yaz\u0131mda ise, farkl\u0131 \u00f6zellikleriyle, Asp.NET MVC 4.0 mimarisine uygun bir bi\u00e7imde URL Routing yap\u0131s\u0131n\u0131 irdeleyece\u011fiz.<!-- 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":[345],"tags":[283,383,385,384,255],"class_list":["post-1467","post","type-post","status-publish","format-standard","hentry","category-mvc-4-0","tag-mvc","tag-mvc-4-0-mvc-4-5","tag-routing","tag-url","tag-url-routing"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1467","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=1467"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1467\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}