Omówienie routingu we wzorcu ASP.NET MVC (VB)

Autor: Stephen Walther

W tym samouczku Stephen Walther pokazuje, jak platforma ASP.NET MVC mapuje żądania przeglądarki na akcje kontrolera.

W tym samouczku przedstawiono ważną funkcję każdej aplikacji MVC ASP.NET o nazwie ASP.NET Routing. Moduł ASP.NET Routing jest odpowiedzialny za mapowanie przychodzących żądań przeglądarki na określone akcje kontrolera MVC. Na koniec tego samouczka dowiesz się, jak standardowa tabela tras mapuje żądania na akcje kontrolera.

Korzystanie z domyślnej tabeli tras

Podczas tworzenia nowej aplikacji ASP.NET MVC aplikacja jest już skonfigurowana do korzystania z routingu ASP.NET. ASP.NET Routing jest skonfigurowany w dwóch miejscach.

Najpierw ASP.NET Routing jest włączony w pliku konfiguracji sieci Web aplikacji (Web.config pliku). Istnieją cztery sekcje w pliku konfiguracji, które są istotne dla routingu: sekcja system.web.httpModules, sekcja system.web.httpHandlers, sekcja system.webserver.modules i sekcja system.webserver.handlers. Uważaj, aby nie usuwać tych sekcji, ponieważ bez tych sekcji routing nie będzie już działać.

Po drugie, i co ważniejsze, tabela tras jest tworzona w pliku Global.asax aplikacji. Plik Global.asax to plik specjalny zawierający programy obsługi zdarzeń dla zdarzeń ASP.NET zdarzeń cyklu życia aplikacji. Tabela tras jest tworzona podczas zdarzenia Uruchamianie aplikacji.

Plik w liście 1 zawiera domyślny plik Global.asax dla aplikacji ASP.NET MVC.

Lista 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

Po pierwszym uruchomieniu aplikacji MVC wywoływana jest metoda Application_Start(). Ta metoda z kolei wywołuje metodę RegisterRoutes(). Metoda RegisterRoutes() tworzy tabelę tras.

Domyślna tabela tras zawiera jedną trasę (o nazwie Default). Trasa domyślna mapuje pierwszy segment adresu URL na nazwę kontrolera, drugi segment adresu URL na akcję kontrolera, a trzeci segment na parametr o nazwie id.

Załóżmy, że wprowadzasz następujący adres URL na pasku adresu przeglądarki internetowej:

/Home/Index/3

Trasa domyślna mapuje ten adres URL na następujące parametry:

  • controller = Strona główna

  • action = Index

  • id = 3

Po zażądaniu adresu URL /Home/Index/3 zostanie wykonany następujący kod:

HomeController.Index(3)

Trasa domyślna zawiera wartości domyślne dla wszystkich trzech parametrów. Jeśli nie podasz kontrolera, parametr kontrolera jest domyślnie ustawiony na wartość Strona główna. Jeśli nie podasz akcji, parametr akcji jest domyślnie ustawiony na wartość Indeks. Na koniec, jeśli nie podasz identyfikatora, parametr id domyślnie do pustego ciągu.

Przyjrzyjmy się kilku przykładom sposobu mapowania adresów URL tras domyślnych na akcje kontrolera. Załóżmy, że wprowadzasz następujący adres URL na pasku adresu przeglądarki:

/W: strona główna

Ze względu na domyślne wartości parametru trasy wprowadzenie tego adresu URL spowoduje wywołanie metody Index() klasy HomeController w liście 2.

Lista 2 — HomeController.vb

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

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

End Class

Na liście 2 klasa HomeController zawiera metodę o nazwie Index(), która akceptuje pojedynczy parametr o nazwie Id. Adres URL /Home powoduje wywołanie metody Index() z wartością Nic jako wartości parametru Id.

Ze względu na sposób wywoływania akcji kontrolera przez strukturę MVC adres URL /Home jest również zgodny z metodą Index() klasy HomeController w liście 3.

Lista 3 — HomeController.vb (akcja indeksu bez parametru)

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

    Function Index()
        Return View()
    End Function

End Class

Metoda Index() w liście List 3 nie akceptuje żadnych parametrów. Adres URL /Strona główna spowoduje wywołanie tej metody Index(). Adres URL /Home/Index/3 wywołuje również tę metodę (identyfikator jest ignorowany).

Adres URL /Home jest również zgodny z metodą Index() klasy HomeController w list 4.

Lista 4 — HomeController.vb (akcja indeksu z parametrem dopuszczalnym do wartości null)

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

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

End Class

Na liście 4 metoda Index() ma jeden parametr liczba całkowita. Ponieważ parametr jest parametrem dopuszczalnym do wartości null (może mieć wartość Nic), indeks() można wywołać bez zgłaszania błędu.

Na koniec wywołanie metody Index() w pozycji Listing 5 z adresem URL /Home powoduje wyjątek, ponieważ parametr Id nie jest parametrem dopuszczalnym do wartości null. Jeśli spróbujesz wywołać metodę Index(), zostanie wyświetlony błąd wyświetlany na rysunku 1.

Lista 5 — HomeController.vb (akcja indeksu z parametrem Id)

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

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

End Class

Wywoływanie akcji kontrolera, która oczekuje wartości parametru

Rysunek 01. Wywoływanie akcji kontrolera, która oczekuje wartości parametru (kliknij, aby wyświetlić obraz pełnowymiarowy)

Adres URL /Home/Index/3, z drugiej strony, działa dobrze w przypadku akcji kontrolera indeksu w liście 5. Żądanie /Home/Index/3 powoduje wywołanie metody Index() z parametrem Id, który ma wartość 3.

Podsumowanie

Celem tego samouczka było krótkie wprowadzenie do usługi ASP.NET Routing. Zbadaliśmy domyślną tabelę tras uzyskaną za pomocą nowej aplikacji ASP.NET MVC. Wiesz już, jak domyślna trasa mapuje adresy URL na akcje kontrolera.