Vytvoření omezení trasy (C#)
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.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {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.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ProductController : Controller
{
public ActionResult Details(int productId)
{
return View();
}
}
}
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.
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.cs
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {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 .