Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC 5 – Attribute İle Routing Yönlendirmesi[Attribute Routing]

Asp.NET MVC 5 sürümü öncesinde Routing işlemlerinin nasıl yapıldığını Asp.NET MVC – URL Routing Şemasını Fiziksel Kabuklama başlıklı yazımda güzel bir şekilde irdelemiştik.Bu yazımda ise Asp.NET MVC 5 projesinde Attribute ile oldukça kısa ve kolay bir şekilde Routing yönlendirmesini inceleyeceğiz.

Asp.NET MVC 5 ile Attribute Routing diye nitelendirilen yönlendirme tekniğini kullanabilmek için öncelikle yapmamız gereken temel aşama “RouteConfig.cs” sınıfının “RegisterRoutes” isimli static metodunda “routes.MapMvcAttributeRoutes();” metodunu çalıştırmaktır.

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes(); ********
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

Yukarıda “RouteConfig.cs” sınıfının içeriğini görmektesiniz.Dikkat ederseniz bahsettiğim metodu yıldızlarla(*) gösterdiğim alanda çağırdım.

Ek olarak Attribute Routing yönteminde kullanacağımız Attribute’un prototipi aşağıdaki gibi olacaktır.

[Route("yonlendirme-adresi")]

Artık bu işlemi yaptıktan sonra Attribute Routing yönlendirmelerini hızlı bir şekilde yapabiliriz.

Hazırlık olarak aşağıda aşama aşama Routing tekniğini görmeden önce, üzerinde örneklendirme yapacağımız “Home(Controller).cs” isimli Controller sınıfımızı oluşturup içerisinde “Index” ve “About” isimlerinde Action metodlarımızı oluşturalım.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Anasayfa";
            return View();
        }
        public ActionResult About()
        {
            ViewBag.Message = "Hakkımda";
            return View();
        }
    }

Yukarda gördüğünüz gibi hazırlıklarımız yaptık.Artık Attribute Routing tekniğimizin aşama aşama anlatımına geçebiliriz.
1. Basit(Sade) Routing
Herhangi bir Controller sınıfında bulunan herhangi bir Action metoda basit(sade) bir şekilde yani parametresiz bir Routing(yönlendirme) işlemi nasıl yapılır inceleyelim.(Tabi biz burada yukarıda hazırladığımız “Home(Controller).cs” isimli Controller sınıfını ve içindeki Action metodlarını kullanarak örneklendirme yapacağız.)

Mesela “Home(Controller).cs” isimli Controller sınıfımızda bulunan “Index” isimli Action metoda Attribute Routing ile yönlendirme işlemi yapalım.

    public class HomeController : Controller
    {
        .
        .
        .
        [Route("Anasayfa")]
        public ActionResult Index()
        {
            return View();
        }
        .
        .
        .
    }

Gördüğünüz gibi “[Route]” Attribute’u ile yönlendirme işlemimizi yapıyoruz.”Index” Action metodunu “Anasayfa” değerine yönlendiriyoruz.
Programımızı derleyip çalıştırdığımızda ise,
asp.net 5 - attribute routing
ekran görüntüsünde gördüğünüz gibi yönlendirme başarılı bir şekilde gerçekleştirilmiş olacaktır.

Attribute Routing ile yönlendirilmiş Action metodlara ActionLink metodu ile yönlendirme yaparsak eğer oluşturulan link nasıl oluyormuş hemen inceleyelim.(Bu gözümden kaçar mı, kaçmaz! 🙂 )

@Html.ActionLink("Anasayfa", "Index", "Home")

Programımızı derleyip çalıştıralım.
asp.net 5 - attribute routing 2
Gördüğünüz gibi Attribute Routing ile yönlendirilmiş değerde bir link yapılandırılması gerçekleştiriliyor.
2. Parametreli Routing
Şimdide, herhangi bir Controller sınıfında bulunan herhangi bir Action metoda parametreli bir şekilde Routing(yönlendirme) işlemi nasıl yapılır inceleyelim.(Tabi ki de gene yukarıdaki sınıflarımızdan örneklendirme yapacağız.)

Bu örneklendirmemizde ise “Home(Controller).cs” Controller sınıfımızdaki “About” isimli Action metodumuzu kullanalım.”About” Action metodumuza “ad” ve “soyad” isimli iki parametre gönderelim.

    public class HomeController : Controller
    {
        .
        .
        .
        [Route("Hakkimizda/{ad}/{soyad}")]
        public ActionResult About(string ad, string soyad)
        {
            ViewBag.Message = ad + " " + soyad;
            return View();
        }
        .
        .
        .
    }

Yukarıdaki kodu derleyip çalıştırdığımız zaman ise,
asp.net 5 - attribute routing 3
ekran görüntüsünde gördüğünüz gibi yönlendirme gerçekleştiriliyor.Tarayıcıdan manuel olarak kendi ad ve soyadımı verdiğim için ekranda benim ismim geçmektedir.

Eğer bu şekilde de ActionLink metodunu denersek aşağıdaki gibi bir link yapılandırması gerçekleştirmektedir.

@Html.ActionLink("Hakkımda", "About", "Home", new { ad = "Gizem", soyad = "IsIk" }, null)

asp.net 5 - attribute routing 4

Sonuç olarak kompleks olmayan yönlendirme işlemlerini Attribute Routing ile gerçekleştirebilir, hızınıza hız katabilirsiniz.Basit isimlendirmelerde çok pratik bir yöntem olduğu için zamandan büyük tasarruf sağlamış olacaksınız.

Hepinize iyi çalışmalar diliyor, sonraki yazılarımda görüşme ümidiyle bu yazımı burada sonlandırıyorum.

Bunlar da hoşunuza gidebilir...

10 Cevaplar

  1. Akif Biçek dedi ki:

    merhaba iyi günler aynı şekilde yapıyorum fakat 404 sayfasına yönlendiriliyorum.

  2. barbaros dedi ki:

    merhaba birden fazla projede çalıştırdığımda web projesinde “Multiple types were found that match the controller named ‘Home’. This can happen if the route that services this request (‘{controller}/{action}/{id}’) does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the ‘MapRoute’ method that takes a ‘namespaces’ parameter.” hatası alıyorum bu yönlendirmeyi nasıl yapabilirim

  3. muhammetelma dedi ki:

    RouteConfig ayar yaptığımda her hangi bir sorun olmuyor çalışıyor Control üzerinde yaptığımda çalışmıyor kullandığım Framerork 4.7.2

            [Route("Anasayfa")]
            public ActionResult Index()
            {
                return View();
            }
    
    • muhammet elma dedi ki:

      Çözümünü buldum RouteConfig dosyasına aşagıdaki kodu girince hersey düzeldi

       routes.MapMvcAttributeRoutes();
      
  1. 28 Haziran 2017

    […] projenizi inşa ederken, oluşturulan adreslerin şablonlarını RouteConfig.cs dosyası yerine Route Attribute özelliğini kullanarak yapmayı tercih ettiğiniz durumda sizi karşılayacak olan olası bir hata […]

  2. 10 Temmuz 2019

    […] MVC 5 mimarisini kısaca özetlemek gerekirse, bir çok getirdiği yeni özelliğinin yanında Attribute Routingyapısını getirmesi en büyük yeniliklerinden birisidir.Şimdi gelin hepberaber, Asp.NET MVC […]

Akif Biçek için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir