Tworzenie ograniczenia trasy (C#)

Autor Stephen Walther

W tym samouczku Stephen Walther demonstruje, jak można kontrolować, jak żądania przeglądarki są zgodne z trasami, tworząc ograniczenia trasy z wyrażeniami regularnymi.

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

Załóżmy na przykład, że w pliku Global. asax została zdefiniowana trasa z listy 1.

Lista 1 — Global.asax.cs

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

Lista 1 zawiera trasę o nazwie Product. Trasy produktu można użyć do mapowania żądań przeglądarki do ProductController zawartych 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 szczegóły () udostępniona przez kontroler produktu akceptuje pojedynczy parametr o nazwie productId. Ten parametr jest parametrem liczby całkowitej.

Trasa zdefiniowana na liście 1 będzie pasować do dowolnych 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 Integer, wykonanie żądania zawierającego coś innego niż wartość całkowita spowoduje wystąpienie błędu. Jeśli na przykład wpiszesz adres URL/Product/Apple w przeglądarce, zobaczysz stronę błędu na rysunku 1.

okno dialogowe Nowy projekt

Ilustracja 01: wyświetlanie rozwinięcia strony (kliknij, aby wyświetlić obraz o pełnym rozmiarze)

To, co naprawdę chcesz zrobić, jest zgodne tylko z adresami URL, które zawierają poprawną liczbę całkowitą productId. Można użyć ograniczenia podczas definiowania trasy, aby ograniczyć adresy URL, które pasują do trasy. 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 + dopasowuje co najmniej jedną liczbę całkowitą. 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

  • /Product

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