Sdílet prostřednictvím


Vytvoření omezení trasy (VB)

Stephen Walther

V tomto kurzu Stephen Walther ukazuje, jak můžete řídit, jak žádosti prohlížeče odpovídají trasám vytvořením omezení tras s regulárními výrazy.

Omezení trasy můžete použít k omezení požadavků prohlížeče, které odpovídají konkrétní trase. K určení omezení trasy můžete použít regulární výraz.

Představte si například, že jste definovali trasu ve výpisu 1 v souboru Global.asax.

Výpis 1 – Global.asax.vb

routes.MapRoute( _
    "Product", _
    "Product/{productId}", _
    New With {.controller = "Product", .action = "Details"} _
)

Výpis 1 obsahuje trasu s názvem Product. Pomocí trasy Product můžete namapovat požadavky prohlížeče na ProductController obsažený ve výpisu 2.

Výpis 2 – Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller
    Function Details(ByVal productId As Integer) As ActionResult
        Return View()
    End Function
End Class

Všimněte si, že akce Details() vystavená kontrolerem produktu přijímá jediný parametr s názvem productId. Tento parametr je celočíselný parametr.

Trasa definovaná v seznamu 1 se bude shodovat s některou z následujících adres URL:

  • /Produkt/23
  • /Produkt/7

Trasa se bohužel bude shodovat také s následujícími adresami URL:

  • /Produkt/bla
  • /Product/apple

Vzhledem k tomu, že akce Details() očekává celočíselný parametr, způsobí vytvoření požadavku, který obsahuje něco jiného než celočíselnou hodnotu, chybu. Pokud například do prohlížeče zadáte adresu URL /Product/apple, zobrazí se chybová stránka na obrázku 1.

Dialogové okno New Project (Nový projekt)

Obrázek 01: Zobrazení exploze stránky (kliknutím zobrazíte obrázek v plné velikosti)

To, co opravdu chcete udělat, je pouze shoda s adresami URL, které obsahují správné celé číslo productId. Omezení můžete použít při definování trasy k omezení adres URL, které odpovídají dané trase. Upravená trasa Product v seznamu 3 obsahuje omezení regulárního výrazu, které odpovídá pouze celá čísla.

Výpis 3 – Global.asax.vb

routes.MapRoute( _
   "Product", _
   "Product/{productId}", _
   New With {.controller = "Product", .action = "Details"}, _
   New With {.productId = "\d+"} _
)

Regulární výraz \d+ se shoduje s jedním nebo více celými čísly. Toto omezení způsobí, že trasa produktu bude odpovídat následujícím adresám URL:

  • /Produkt/3
  • /Produkt/8999

Ale ne následující adresy URL:

  • /Product/apple
  • /Produktu

Tyto požadavky prohlížeče budou zpracovány jinou trasou, nebo pokud neexistují žádné odpovídající trasy, vrátí se chyba Prostředek se nepodařilo najít .