Книга: ASP.NET MVC Framework
Маршрут и класс Route
Маршрут и класс Route
Маршрут в понятии ASP.NET — это строка, которая представляет собой шаблон URL-строки запроса к веб-приложению. Этот шаблон определяет, какие запросы попадают под понятие данного маршрута, а какие нет. Шаблоны маршрутов содержат параметры, имена которых заключены в фигурные скобки. Обычно параметры разделены обратным слэшем (/) как разделяющие сегменты URL-строки. Например, маршрут, определенный следующим образом admin/{user}/{action},
содержит два параметра: user
и action
. Такому маршруту могут соответствовать следующие строки URL: http://sample.domain/ admin/foo/add/ или http://sample.domain/admin/bee/edit/. Где foo и bee определяются как значения параметра user
, а add и edit — параметра action
.
Механизм MVC Framework определяет два базовых параметра маршрутов: controller
и action
, которые предназначены для определения разработчиком месторасположения наименования контроллера и действия в строке запроса. Остальные параметры являются пользовательскими и определяются разработчиком. Например, следующий маршрут {controller}/{action}/{user}/{page}
определяет кроме базовых параметров controller
и action
еще два пользовательских: user
и page
. Такому маршруту может соответствовать строка запроса http://sample.domain/User/GetUserMessages/user1/2/. Механизм MVC Framework при сопоставлении данных маршрутов и строки запроса определит, что требуется вызвать действие с именем GetUserMessages
в контроллере с именем UserController
, которому нужно передать два параметра: user
со значением user1 и page
со значением 2.
Одним из базовых классов маршрутизации ASP.NET является класс Route
, который позволяет разработчику определить свойства маршрута. Рассмотрим основные свойства, которые содержит класс Route
:
? Constraints
— свойство типа RouteValueDictionary
, которое хранит все ограничения, накладываемые разработчиком на маршрут;
? DataTokens
— свойство типа RouteValueDictionary
, которое хранит набор параметров, не участвующих в разборе шаблона, но передающихся обработчику маршрута как дополнительная информация;
? Defaults
— свойство типа RouteValueDictionary
, которое хранит значения параметров маршрута по умолчанию. Данные значения используются, когда определенная для маршрута строка URL не содержит необходимого параметра;
? RouteHandler
— свойство, реализующее интерфейс IRouteHandler
, является обработчиком маршрута, который определяет, подходит или нет заданный URL запроса к маршруту;
? Url
— строковое свойство, которое содержит определение шаблона маршрута.
Создание экземпляра Route
не вызывает трудностей, например, в следующем фрагменте представлено создание маршрута, аналогичного тому, что создается в проекте MVC Framework по умолчанию:
var defaults = new RouteValueDictionary
{
{"controller", "Home"},
{"action", "Index"},
{"id", ""}
};
routes.Add(new Route(
"{controller}/{action}/{id}",
defaults,
null,
null,
new MvcRouteHandler()
));
Класс Route
имеет несколько конструкторов, конструктор с самым большим числом параметров определен так:
public Route(string url,
RouteValueDictionary defaults,
RouteValueDictionary constraints,
RouteValueDictionary dataTokens,
IRouteHandler routeHandler
Рассмотрим параметры, которые передаются в этот конструктор:
? url
— обязательный параметр, определяет строку шаблона для маршрута;
? defaults
— необязательный параметр, определяет значения по умолчанию для параметров маршрута;
? constraints
— необязательный параметр, определяет ограничения для маршрута;
? dataTokens
— необязательный параметр, определяет дополнительные данные для маршрута;
? routeHandler
— обязательный параметр, определяет обработчик, реализующий интерфейс IRouteHandler
для обработки маршрута. В MVC Framework обработчиком по умолчанию является класс MVCRouteHandler
.
- Глава 24 Расширенные средства маршрутизации
- 6.16.12 Кодирование Record Route
- 14.12.2. Маршрутизация от источника
- Заполнение таблицы маршрутизации
- Использование протоколов маршрутизации
- Использование routed
- 6.16.4 Маршрутизация от источника и безопасность
- 6.16.3 Описание маршрута
- I.3.3. Маршрутизаторы
- Обработчик маршрутов и интерфейс IRouteHandler
- Таблица маршрутизации и класс RouteTable
- Коллекция маршрутов и класс RouteCollection