Книга: ASP.NET MVC Framework
Коллекция маршрутов и класс RouteCollection
Коллекция маршрутов и класс RouteCollection
Для того чтобы механизм MVC Framework начал работать с маршрутом, который определяет пользователь, необходимо, чтобы маршрут попал в таблицу маршрутизации. Такая таблица основывается на классе RouteCollection
, который представляет собой коллекцию маршрутов.
По существу класс RouteCollection
представляет собой класс, наследующий от класса Collection<BaseRoute>.
То есть RouteCollection
содержит все методы по управлению коллекций элементов, такие как Add, Clear, Remove, SetItem
и пр. Кроме того, из определения понятно, что RouteCollection
может оперировать только элементами типа BaseRoute
и его производными, которым является класс Route
.
Кроме базовых методов, унаследованных от Collection
, в RouteCollection
определены следующие методы и свойства:
? Add
— перегруженный метод, который позволяет не просто добавить в коллекцию элемент маршрута, но добавить его и сопоставить ему наименование;
? GetReadLock, GetWriteLock
— методы, которые позволяют организовать потокобезопасные операции с коллекцией маршрутов;
? GetRouteData
— метод, который возвращает информацию о маршруте в виде экземпляра типа RouteData;
? GetVirtualPath
— метод, который возвращает объект типа VirtualPathData
, который позволяет получить URL, соответствующий заданным параметрам маршрута;
? RouteExistingFile
— булево свойство, которое позволяет определить, следует ли обрабатывать запросы к локальным файлам, таким как вебстраницы, скрипты, стили или изображения в виде запросов к механизму маршрутизации, или отдавать их, минуя этот механизм.
Работа с коллекцией маршрутов в MVC Framework происходит через таблицу маршрутизации RouteTable
и статическое свойство Routes
, которое является экземпляром RouteCollection
.
Для упрощения работы с коллекцией RouteCollection
механизм MVC Framework определяет два метода расширения:
? MapRoute
— позволяет добавлять в коллекцию маршрутов новый маршрут;
? IgnoreRoute
— позволяет добавлять в коллекцию маршрутов новый маршрут, который, однако, добавляется с обработчиком маршрутов StopRoutingHandler
, что означает игнорирование механизмом маршрутизации указанного маршрута.
Рассмотрим, как работают эти методы расширения. Метод MapRoute
имеет несколько вариантов, далее представлено определение для метода с самым большим числом параметров:
public static Route MapRoute(
this RouteCollection routes,
string name,
string url,
object defaults,
object constraints,
string[] namespaces
Все варианты метода расширения MapRoute
, определенные в MVC Framework, для добавления маршрута требуют указания наименования маршрута, которое задается через параметр name
. Параметр url
определяет шаблон маршрута, а параметры defaults
и constraints
— словари с набором параметров по умолчанию и ограничений. Методы расширения MapRoute
не содержат возможности задавать значения для свойства DataTokens
, как это делает настоящий конструктор маршрута, и на это есть причина. Поскольку MVC Framework имеет работающий по умолчанию обработчик для маршрутов в виде класса MvcRouteHandler
, надобность в пользовательских параметрах, которые передаются для обработчика через DataTokens
, отпадает. Однако такие параметры и DataTokens
обработчик MvcRouteHandler
все же использует. Через параметр namespaces
метода расширения MapRoute
разработчик может задать массив наименований пространств имен. Этот массив передается в DataTokens
и в дальнейшем используется механизмом MVC Framework для поиска классов контроллеров только в тех пространствах имен, которые в нем определены.
Метод IgnoreRoute
, в своем самом большом варианте, определен следующим образом:
public static void IgnoreRoute(
this RouteCollection routes,
string url,
object constraints
Параметров у метода всего два. Первый — url
— определяет маршрут, который подлежит игнорировать. Второй — constraints
— содержит словарь ограничений для параметров маршрута, что позволяет более гибко настраивать игнорирование маршрутов. На самом деле IgnoreRoute
создает маршрут, но сопоставляет ему не стандартный для MVC Framework обработчик MvcRouteHandler
, а обработчик StopRoutingHandler
, определенный в механизме маршрутизации ASP.NET, который предназначен для пропуска маршрутов механизмом маршрутизации.
- Коллекция Drives
- Коллекция Folders
- Коллекция Files
- Глава 9 Коллекция находок
- 8.17.5 Применение объединения маршрутов
- Не просто коллекция функций
- 7.8 Обнаружение маршрутов
- 8.17.1 Объединение маршрутов в BGP
- Хранение элементов в коллекциях и получение элементов из коллекций
- Коллекция компиляторов GNU
- Коллекция объектов
- Обработчик маршрутов и интерфейс IRouteHandler