Sdílet prostřednictvím


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

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ů prohlížeče na konkrétní akce kontroleru MVC. Na konci tohoto kurzu pochopíte, 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, aplikace je již nakonfigurovaná tak, aby používala směrování ASP.NET. ASP.NET Směrování je nastavené na dvou místech.

Nejprve ASP.NET Směrování je povolené v konfiguračním souboru webu vaší aplikace (Web.config souboru). V konfiguračním souboru jsou čtyři oddíly, které jsou relevantní pro směrování: oddíl system.web.httpModules, oddíl system.web.httpHandlers, oddíl system.webserver.modules a oddíl 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.vb

' Note: For instructions on enabling IIS6 or IIS7 classic mode, 
' visit https://go.microsoft.com/?LinkId=9394802

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

        ' MapRoute takes the following parameters, in order:
        ' (1) Route name
        ' (2) URL with parameters
        ' (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

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ž požádáte o 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, parametr akce se ve výchozím nastavení nastaví na hodnotu Index. Pokud nezadáte ID, parametr id se ve výchozím nastavení nastaví na 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ů

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

Výpis 2 – HomeController.vb

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As String)
        Return View()
    End Function

End Class

Ve výpisu 2 obsahuje třída HomeController metodu s názvem Index(), která přijímá jeden parametr s názvem Id. Adresa URL /Home způsobí volání metody Index() s hodnotou Nothing jako hodnotou parametru Id.

Vzhledem k tomu, že rozhraní MVC vyvolá akce kontroleru, adresa URL /Home také odpovídá index() metody HomeController třídy v výpisu 3.

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

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

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 se ignoruje).

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

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

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id? As Integer)
        Return View()
    End Function

End Class

Ve výpisu 4 má metoda Index() jeden celočíselný parametr. Vzhledem k tomu, že parametr je parametr s možnou hodnotou null (může mít hodnotu Nothing), lze index() 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í parametrem s možnou hodnotou null. Pokud se pokusíte vyvolat metodu Index(), zobrazí se chyba na obrázku 1.

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

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index(ByVal id As Integer)
        Return View()
    End Function

End Class

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 stručný úvod ke směrování ASP.NET. Prozkoumali jsme výchozí směrovací tabulku, kterou získáte s novou aplikací ASP.NET MVC. Dozvěděli jste se, jak výchozí trasa mapuje adresy URL na akce kontroleru.