Tworzenie ograniczenia trasy (C#)

Autor: Stephen Walther

W tym samouczku Stephen Walther pokazuje, jak można kontrolować, jak żądania przeglądarki są zgodne z trasami, tworząc ograniczenia trasy przy użyciu wyrażeń regularnych.

Ograniczenia trasy służą do ograniczania żądań przeglądarki, które pasują do określonej trasy. Możesz użyć wyrażenia regularnego, aby określić ograniczenie trasy.

Załóżmy na przykład, że zdefiniowano trasę w liście 1 w pliku Global.asax.

Lista 1 — Global.asax.cs

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"}
);

Lista 1 zawiera trasę o nazwie Product. Możesz użyć trasy Produktu, aby zamapować żądania przeglądarki na productController zawarte w liście 2.

Lista 2 — Controllers\ProductController.cs

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
        public ActionResult Details(int productId)
        {
            return View();
        }
    }
}

Zwróć uwagę, że akcja Details() uwidoczniona przez kontroler produktu akceptuje pojedynczy parametr o nazwie productId. Ten parametr jest parametrem całkowitym.

Trasa zdefiniowana na liście 1 będzie zgodna z dowolnym z następujących adresów URL:

  • /Product/23
  • /Product/7

Niestety trasa będzie również zgodna z następującymi adresami URL:

  • /Product/blah
  • /Product/apple

Ponieważ akcja Details() oczekuje parametru liczby całkowitej, wykonanie żądania zawierającego coś innego niż wartość całkowita spowoduje błąd. Jeśli na przykład wpiszesz adres URL /Product/apple w przeglądarce, zostanie wyświetlona strona błędu na rysunku 1.

Okno dialogowe Nowy projekt

Rysunek 01. Wyświetlanie eksplodowania strony (kliknij, aby wyświetlić obraz pełnowymiarowy)

To, co naprawdę chcesz zrobić, to tylko zgodne adresy URL, które zawierają odpowiedni identyfikator productId liczby całkowitej. Ograniczenie można użyć podczas definiowania trasy, aby ograniczyć adresy URL zgodne z trasą. Zmodyfikowana trasa produktu na liście 3 zawiera ograniczenie wyrażenia regularnego, które jest zgodne tylko z liczbami całkowitymi.

Lista 3 — Global.asax.cs

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );

Wyrażenie regularne \d+ pasuje do co najmniej jednej liczby całkowitej. To ograniczenie powoduje, że trasa produktu jest zgodna z następującymi adresami URL:

  • /Product/3
  • /Product/8999

Ale nie następujące adresy URL:

  • /Product/apple

  • /Produktu

  • Te żądania przeglądarki będą obsługiwane przez inną trasę lub, jeśli nie ma pasujących tras, zostanie zwrócony błąd Nie można odnaleźć zasobu .