Aracılığıyla paylaş


ASP.NET MVC Yönlendirmesine Genel Bakış (C#)

tarafından Stephen Walther

Bu öğreticide Stephen Walther, ASP.NET MVC çerçevesinin tarayıcı isteklerini denetleyici eylemlerine nasıl eşlemektedir?

Bu öğreticide, her ASP.NET MVC uygulamasının ASP.NET Yönlendirme adlı önemli bir özelliği tanıtılır. ASP.NET Yönlendirme modülü, gelen istekleri belirli MVC denetleyicisi eylemleriyle eşlemeden sorumludur. Bu öğreticinin sonunda, standart yönlendirme tablosunun istekleri denetleyici eylemlerine nasıl eşlediğiniz anlayacaksınız.

Varsayılan Yol Tablosunu Kullanma

Yeni bir ASP.NET MVC uygulaması oluşturduğunuzda, uygulama zaten ASP.NET Yönlendirme kullanacak şekilde yapılandırılmıştır. ASP.NET Yönlendirme iki yerde ayarlanır.

İlk olarak, uygulamanızın Web yapılandırma dosyasında (Web.config dosyası) ASP.NET Yönlendirme etkinleştirilir. Yapılandırma dosyasında yönlendirmeyle ilgili dört bölüm vardır: system.web.httpModules bölümü, system.web.httpHandlers bölümü, system.webserver.modules bölümü ve system.webserver.handlers bölümü. Bu bölümleri silmemeye dikkat edin çünkü bu bölümler olmadan yönlendirme artık çalışmaz.

İkincisi ve daha da önemlisi, uygulamanın Global.asax dosyasında bir yol tablosu oluşturulur. Global.asax dosyası, ASP.NET uygulama yaşam döngüsü olayları için olay işleyicileri içeren özel bir dosyadır. Yol tablosu, Uygulama Başlatma olayı sırasında oluşturulur.

Listeleme 1'deki dosya, bir ASP.NET MVC uygulaması için varsayılan Global.asax dosyasını içerir.

Listeleme 1 - Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit https://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

MVC uygulaması ilk kez başlatıldığında Application_Start() yöntemi çağrılır. Bu yöntem de RegisterRoutes() yöntemini çağırır. RegisterRoutes() yöntemi, yol tablosunu oluşturur.

Varsayılan yol tablosu tek bir yol (Varsayılan adlı) içerir. Varsayılan yol, URL'nin ilk kesimini denetleyici adıyla, URL'nin ikinci kesimini denetleyici eylemine ve üçüncü kesimi id adlı bir parametreyle eşler.

Web tarayıcınızın adres çubuğuna aşağıdaki URL'yi girdiğinizi düşünün:

/Home/Index/3

Varsayılan yol, bu URL'yi aşağıdaki parametrelerle eşler:

  • controller = Home

  • action = Dizin

  • id = 3

/Home/Index/3 URL'sini istediğinizde aşağıdaki kod yürütülür:

HomeController.Index(3)

Varsayılan yol, üç parametrenin de varsayılanlarını içerir. Bir denetleyici sağlamazsanız, denetleyici parametresi varsayılan olarak Home değerine ayarlanır. Bir eylem sağlamazsanız, eylem parametresi varsayılan olarak Index değerine ayarlanır. Son olarak, kimlik sağlamazsanız id parametresi varsayılan olarak boş bir dizeye ayarlanır.

Şimdi Varsayılan rotanın URL'leri denetleyici eylemleriyle nasıl eşlemesine ilişkin birkaç örneğe göz atalım. Tarayıcı adres çubuğuna aşağıdaki URL'yi girdiğinizi düşünün:

/Ev

Varsayılan yol parametresi varsayılanları nedeniyle, bu URL'nin girilmesi, Listeleme 2'deki HomeController sınıfının Index() yönteminin çağrılmasına neden olur.

Liste 2 - HomeController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            return View();
        }
    }
}

Liste 2'de HomeController sınıfı, Id adlı tek bir parametreyi kabul eden Index() adlı bir yöntem içerir. URL /Home, Index() yönteminin id parametresinin değeri olarak boş bir dizeyle çağrılmalarına neden olur.

MVC çerçevesinin denetleyici eylemlerini çağırma şekli nedeniyle, /Home URL'si De Listeleme 3'teki HomeController sınıfının Index() yöntemiyle eşleşir.

Listeleme 3 - HomeController.cs (Parametre içermeyen dizin eylemi)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Listeleme 3'teki Index() yöntemi herhangi bir parametre kabul etmez. /Home URL'si bu Index() yönteminin çağrılmasına neden olur. /Home/Index/3 URL'si de bu yöntemi çağırır (kimlik yoksayılır).

/Home URL'si, Liste 4'teki HomeController sınıfının Index() yöntemiyle de eşleşir.

Listeleme 4 - HomeController.cs (Null atanabilir parametreli dizin eylemi)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int? id)
        {
            return View();
        }
    }
}

Listeleme 4'te Index() yönteminin bir Integer parametresi vardır. Parametre null atanabilir bir parametre olduğundan (Null değerine sahip olabilir), Index() bir hata oluşturmadan çağrılabilir.

Son olarak, Liste 5'te Index() yönteminin URL /Home ile çağrılması, Id parametresi null atanabilir bir parametre olmadığından özel duruma neden olur. Index() yöntemini çağırmaya çalışırsanız, Şekil 1'de görüntülenen hatayı alırsınız.

Listeleme 5 - HomeController.cs (Kimlik parametresiyle dizin eylemi)

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(int id)
        {
            return View();
        }
    }
}

Parametre değeri bekleyen bir denetleyici eylemi çağırma

Şekil 01: Parametre değeri bekleyen bir denetleyici eylemi çağırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

/Home/Index/3 URL'si ise Liste 5'teki Dizin denetleyicisi eylemiyle sorunsuz çalışır. /Home/Index/3 isteği Index() yönteminin 3 değerine sahip bir Id parametresiyle çağrılmaya neden olur.

Özet

Bu öğreticinin amacı size ASP.NET Yönlendirmeye kısa bir giriş sağlamaktı. Yeni bir ASP.NET MVC uygulamasıyla elde ettiğiniz varsayılan yol tablosunu inceledik. Varsayılan yolun URL'leri denetleyici eylemleriyle nasıl eşlediğiniz hakkında bilgi edindiniz.