Sdílet prostřednictvím


ASP.NET MVC – přehled směrování (C#)

Stephen Walther

V tomto kurzu Stephen Walther ukazuje, jak rozhraní ASP.NET MVC mapuje požadavky prohlížeče na akce kontroleru.

V tomto kurzu se seznámíte s důležitou funkcí každé aplikace ASP.NET MVC s názvem ASP.NET Routing. Modul ASP.NET Routing zodpovídá za mapování příchozích požadavků na konkrétní akce kontroleru MVC. Na konci tohoto kurzu budete rozumět tomu, jak standardní směrovací tabulka mapuje požadavky na akce kontroleru.

Použití výchozí směrovací tabulky

Když vytvoříte novou aplikaci ASP.NET MVC, je už aplikace nakonfigurovaná tak, aby používala směrování ASP.NET. ASP.NET Směrování je nastavené na dvou místech.

Nejprve ASP.NET v konfiguračním souboru webu vaší aplikace (Web.config souboru). Konfigurační soubor obsahuje čtyři oddíly, které jsou relevantní pro směrování: část system.web.httpModules, část system.web.httpHandlers, část system.webserver.modules a část system.webserver.handlers. Dávejte pozor, abyste tyto oddíly neodstranily, protože bez těchto oddílů už směrování nebude fungovat.

Za druhé, a co je důležitější, v souboru Global.asax aplikace se vytvoří směrovací tabulka. Soubor Global.asax je speciální soubor, který obsahuje obslužné rutiny událostí pro ASP.NET události životního cyklu aplikace. Směrovací tabulka se vytvoří během události Spuštění aplikace.

Soubor ve výpisu 1 obsahuje výchozí soubor Global.asax pro aplikaci ASP.NET MVC.

Výpis 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);
        }
    }
}

Při prvním spuštění aplikace MVC se volá metoda Application_Start(). Tato metoda zase volá metodu RegisterRoutes(). Metoda RegisterRoutes() vytvoří směrovací tabulku.

Výchozí směrovací tabulka obsahuje jednu trasu (s názvem Výchozí). Výchozí trasa mapuje první segment adresy URL na název kontroleru, druhý segment adresy URL na akci kontroleru a třetí segment na parametr s názvem id.

Představte si, že do adresního řádku webového prohlížeče zadáte následující adresu URL:

/Home/Index/3

Výchozí trasa mapuje tuto adresu URL na následující parametry:

  • controller = Home

  • action = Index

  • ID = 3

Když si vyžádáte adresu URL /Home/Index/3, spustí se následující kód:

HomeController.Index(3)

Výchozí trasa obsahuje výchozí hodnoty pro všechny tři parametry. Pokud nezadáte kontroler, nastaví se výchozí hodnota parametru kontroleru na hodnotu Home. Pokud akci nezadáte, jako výchozí parametr akce se nastaví hodnota Index. Pokud nezadáte ID, parametr id se jako výchozí nastaví prázdný řetězec.

Podívejme se na několik příkladů, jak výchozí trasa mapuje adresy URL na akce kontroleru. Představte si, že do adresního řádku prohlížeče zadáte následující adresu URL:

/Domů

Protože výchozí parametr trasy výchozí, zadání této adresy URL způsobí index() metodu HomeController třídy ve výpisu 2 bude volána.

Výpis 2 – HomeController.cs

using System.Web.Mvc;

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

Ve výpisu 2 homeController třída obsahuje metodu s názvem Index(), která přijímá jeden parametr s názvem Id. Adresa URL /Home způsobí, že metoda Index() bude volána s prázdným řetězcem jako hodnotou parametru Id.

Vzhledem ke způsobu, jakým rozhraní MVC vyvolává akce kontroleru, adresa URL /Home také odpovídá metodě Index() třídy HomeController ve výpisu 3.

Výpis 3 – HomeController.cs (akce indexu bez parametru)

using System.Web.Mvc;

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

Metoda Index() ve výpisu 3 nepřijímá žádné parametry. Adresa URL /Home způsobí volání této metody Index(). Tuto metodu vyvolá také adresa URL /Home/Index/3 (ID je ignorováno).

Adresa URL /Home také odpovídá metodě Index() třídy HomeController ve výpisu 4.

Výpis 4 – HomeController.cs (akce indexu s parametrem s možnou hodnotou null)

using System.Web.Mvc;

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

Ve výpisu 4 má metoda Index() jeden parametr Integer. Protože parametr je parametr s možnou hodnotou null (může mít hodnotu Null), index() lze volat bez vyvolání chyby.

Nakonec vyvolání metody Index() ve výpisu 5 s adresou URL /Home způsobí výjimku, protože parametr Id není parametr s možnou hodnotou null. Pokud se pokusíte vyvolat metodu Index(), zobrazí se chyba zobrazená na obrázku 1.

Výpis 5 – HomeController.cs (akce indexu s parametrem ID)

using System.Web.Mvc;

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

Vyvolání akce kontroleru, která očekává hodnotu parametru

Obrázek 01: Vyvolání akce kontroleru, která očekává hodnotu parametru (kliknutím zobrazíte obrázek v plné velikosti)

Adresa URL /Home/Index/3 na druhé straně funguje v pořádku s akcí kontroleru indexu ve výpisu 5. Požadavek /Home/Index/3 způsobí, že metoda Index() bude volána s parametrem Id, který má hodnotu 3.

Souhrn

Cílem tohoto kurzu bylo poskytnout vám stručný úvod do ASP.NET Směrování. Prozkoumali jsme výchozí směrovací tabulku, kterou získáte s novou aplikací ASP.NET MVC. Zjistili jste, jak výchozí trasa mapuje adresy URL na akce kontroleru.