Udostępnij za pośrednictwem


Tworzenie ograniczenia trasy (VB)

Autor: Stephen Walther

W tym samouczku Stephen Walther pokazuje, jak można kontrolować sposób dopasowywania żądań przeglądarki przez tworzenie ograniczeń trasy za pomocą wyrażeń regularnych.

Ograniczenia trasy umożliwiają ograniczenie żądań przeglądarki pasujących 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 pliku Global.asax na liście 1.

Lista 1 — Global.asax.vb

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

Lista 1 zawiera trasę o nazwie Product. Za pomocą trasy Product można mapować żądania przeglądarki na productController zawarte w liście 2.

Lista 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

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:

  • /Produkt/bla
  • /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 dopasowanie tylko adresów URL zawierających właściwą liczbę całkowitą productId. Ograniczenie można użyć podczas definiowania trasy w celu ograniczenia adresów URL pasujących do trasy. Zmodyfikowana trasa produktu na liście 3 zawiera ograniczenie wyrażenia regularnego, które pasuje tylko do liczb całkowitych.

Lista 3 — Global.asax.vb

routes.MapRoute( _
   "Product", _
   "Product/{productId}", _
   New With {.controller = "Product", .action = "Details"}, _
   New With {.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 .