Создание ограничения маршрута (VB)
В этом руководстве Стивен Уолтер демонстрирует, как можно управлять сопоставлением запросов браузера с маршрутами, создавая ограничения маршрутов с помощью регулярных выражений.
Ограничения маршрутов используются для ограничения запросов браузера, соответствующих определенному маршруту. Для указания ограничения маршрута можно использовать регулярное выражение.
Например, представьте, что вы определили маршрут в листинге 1 в файле Global.asax.
Листинг 1. Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"} _
)
В листинге 1 содержится маршрут с именем Product. Маршрут продукта можно использовать для сопоставления запросов браузера с ProductController, содержащимся в листинге 2.
Листинг 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
Обратите внимание, что действие Details(), предоставляемое контроллером Product, принимает один параметр с именем productId. Этот параметр является целочисленным.
Маршрут, определенный в листинге 1, будет соответствовать любому из следующих URL-адресов:
- /Product/23
- /Product/7
К сожалению, маршрут также будет соответствовать следующим URL-адресам:
- /Product/blah
- /Product/apple
Так как действие Details() ожидает целочисленный параметр, выполнение запроса, содержащего не целочисленное значение, приведет к ошибке. Например, если ввести URL-адрес /Product/apple в браузере, появится страница ошибки на рис. 1.
Рис. 01. Просмотр взрыва страницы (щелкните для просмотра полноразмерного изображения)
То, что вы действительно хотите сделать, это только сопоставить URL-адреса, которые содержат правильный целочисленный productId. При определении маршрута можно использовать ограничение, чтобы ограничить URL-адреса, соответствующие маршруту. Измененный маршрут продукта в листинге 3 содержит ограничение регулярного выражения, которое соответствует только целым числам.
Листинг 3. Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"}, _
New With {.productId = "\d+"} _
)
Регулярное выражение \d+ соответствует одному или нескольким целым числам. Это ограничение приводит к тому, что маршрут Продукта будет соответствовать следующим URL-адресам:
- /Product/3
- /Product/8999
Но не следующие URL-адреса:
- /Product/apple
- /Product
Эти запросы браузера будут обрабатываться другим маршрутом, или, если соответствующие маршруты отсутствуют, будет возвращена ошибка Ресурс не найден .
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по