Veysel Uğur KIZMAZ

Asp.Net MVC Routing

16.06.2012Okunma Sayısı: 8631Kategori: ASP.NET MVC

Bu makalemizde Asp.Net MVC’de Routing (yönlendirme) yapılandırmasını inceleyeceğiz

Asp.Net Web Application’da URL Rewrite, sayfamıza erişim sırasında kolaylıklar sağlamaktaydı. En büyük avantajı ise SEO’da sağlamaktaydı. Bu işlem Asp.Net’te biraz zaman almaktaydı. Fakat MVC’de bu işlem Routing mantığıyla çok kolaylaştırılmıştır.
 
Asp.Net MVC mimarisinde Route yapısını, bir örnek uygulama üzerinde incelelim.
 
Yeni bir Asp.Net MVC (Empty) Web Application oluşturalım.
 
Uygulamamıza 2 adet Controller ekleyelim : HomeController, MakaleController.
 
HomeController altına Index ve About Action’larını ekleyelim.
 
HomeController.cs
 
  1. public class HomeController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {
  5.         return View();
  6.     }
  7.     public ActionResult About()
  8.     {
  9.         return View();
  10.     }
 
MakaleController altına MakaleListe isminde bir action ekleyelim.
 
MakaleController.cs
 
  1. public class MakaleController : Controller
  2. {
  3.     public ActionResult MakaleListe()
  4.     {
  5.         return View();
  6.     }
  7. }
 
Eklediğimiz tüm actionların View’larını projeye dahil edelim. View’ları eklerken layout olarak Shared/_Layout.cshtml dosyasını seçelim.
 
 
Şimdi Global.asax dosyamıza gelelim ve Route işlemlerini gerçekleştireceğimiz RegisterRoutes methodunu inceleyelim.
 
Global.asax.cs
 
  1. public static void RegisterRoutes(RouteCollection routes)
  2. {
  3.     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  4.  
  5.     routes.MapRoute(
  6.         "Default"// Route name
  7.         "{controller}/{action}/{id}"// URL with parameters
  8.         new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  9.     );
  10.  
  11. }
 
Burada bizim için en önemli nokta, routes.MapRoute methodudur. Bu method ile yönlendirme işlemimiz gerçekleşmektedir. Yani:
{controller} yerine birşey yazmazsak varsayılan olarak “Home” controller’ını alacaktır.
 
{action} yerine birşey yazmazsak varsayılan olarak “Index” action’ını alacaktır.
 
Projemizi çalıştıralım ve localhost:xxxx/ linkine gidelim. Bu linkin yanına herhangi bir Controller ve View eklemediğimiz için Home/Index’i çalıştırmasını beklemekteyiz.
 
 
Şimdi RegisterRoutes methodunda bazı düzenlemeler yapalım. Bu düzenlemeler ile :
 
1. localhost:xxxx/yazilimdevi/giris linkine gittiğimizde Home/Index view’ı çalışsın.
2. localhost:xxxx/yazilimdevi/makale linkine gittiğimzde Makale/makaleListe view’ı çalışsın
 
Global.asax.cs
 
  1. public static void RegisterRoutes(RouteCollection routes)
  2. {
  3.     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  4.    
  5.     routes.MapRoute(
  6.         "Default"// Route name
  7.         "yazilimdevi/giris/{controller}/{action}/{id}"// URL with parameters
  8.         new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  9.     );
  10.     routes.MapRoute("Makale",
  11.         "yazilimdevi/makale/{controller}/{action}",
  12.         new { controller = "Makale", action = "MakaleListe" });
  13.    
  14. }

 

Bu iki işlem için 2 tane MapRoute ekledik. İlk maproute’da yazilimdevi/giris’i {} kullanmadan yazmammızın sebebi, bu değerleri parametre olarak değil, string ifade olarak kullanacağımızdandır.
 
Projemizi çalıştıralım ve aşağıdaki incelemeleri yapalım:
 
1. localhost:xxxx/ linkine gidelim
 
Bu link Global.asax’ta tanımlanmadığı için gideceği yeri bulamayacaktır.
 
2. localhost:xxxx/yazilimdevi/ linkine gidelim
 
Bu link de tanımlı olmadığı için gideceği yeri bulamayacaktır.
 
3. localhost:xxxx/yazilimdevi/giris linkine gidelim
 
MapRoute olarak tanımlandığı için Home/Index View’ına gittik.
 
4. localhost:xxxx/yazilimdevi/makale linkine gidelim
 
MapRoute olarak tanımlandığı için Makale/MakaleListe View’ına gittik.
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com