Книга: ASP.NET MVC Framework
Маршрутизация в ASP.NET
Маршрутизация в ASP.NET
Механизм маршрутизации ASP.NET был представлен в .NET Framework 3.5 SP1 и представляет собой набор классов, объединенных в пространстве имен System.Web.Routing
. В состав System.Web.Routing
входят следующие основные классы и интерфейсы:
? класс UrlRoutingModule
реализует интерфейс iHttpModule
для обработки клиентских запросов и последующего сопоставления данных запроса одному из маршрутов, определенных в приложении;
? RouteTable
представляет собой класс, хранящий таблицу маршрутизации, т. е. все маршруты, используемые в приложении;
? класс RouteCollection
предоставляет организацию и доступ к коллекции маршрутов;
? класс Route
предназначен для определения свойств маршрута и предоставления данных о нем;
? класс RouteData
содержит данные о запрошенном через механизмы RouteCollection
маршруте;
? класс RequestContext
содержит информацию о контексте пользовательского запроса, его параметрах и данных, а также информацию о выбранном маршруте. Этот класс является значительным для MVC Framework механизмом, который используется на всех этапах обработки и выполнения запроса;
? интерфейс IRouteHandler
определяет обработчик маршрутов;
? интерфейс IRouteConstraint
определяет условия, налагающие ограничения на параметры маршрута.
Кроме этих классов в пространстве имен System.Web.Routing
определены еще некоторые классы и перечисления, которые играют вспомогательную или базовую роль для перечисленных классов и интерфейсов.
Рассмотрим применение классов механизма маршрутизации на примере стандартного проекта MVC Framework. В базовом шаблоне проекта MVC Framework в web.config механизмом, обрабатывающим запросы по умолчанию, назначен механизм маршрутизации, представленный классом UrlRoutingModule
. Именно этот модуль определен в секциях httpModules
и system.webServer
как модуль, обрабатывающий HTTP-запросы.
Когда веб-приложение MVC Framework запускается в первый раз, выполняется метод Application_Start
, определенный в global.asax. В проекте по умолчанию MVC Framework определяет в Application_Start
инициализацию таблицы маршрутизации, представленную классом RouteTable
. RouteTable
содержит статическое свойство Routes
, которое представляет собой экземпляр коллекции RouteCollection
. Routes
, с помощью вспомогательного метода RegisterRoutes
заполняется маршрутами, которые определяет пользователь. Каждый такой маршрут представляет собой объект типа Route
. По умолчанию в проекте MVC Framework создается всего один маршрут, рассмотрим его на следующем фрагменте кода из файла global.asax.cs:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Здесь для таблицы маршрутизации RouteTable.Routes
выполняются два действия. Во-первых, вызывается метод IgnoreRoute
, который определяет в таблице правило игнорирования маршрута для запросов, содержащих ссылки на AXD-файлы. Определяя правило игнорирования, вы исключаете запрос, который должен быть обработан другим обработчиком, из маршрутизации.
Во-вторых, вызывается метод расширения MapRoute
, который регистрирует единственный маршрут в таблице маршрутизации. Для этого в данном конкретном примере он принимает три параметра: наименование маршрута, шаблон маршрута и определение значений параметров шаблона по умолчанию. Наименование маршрута, определенное как Default
, может быть использовано в дальнейшем для обращения к маршруту и оперирования с ним. Более подробно разберем шаблон маршрута и параметры по умолчанию.
Шаблон маршрута, представленный строкой {controller}/{action}/{id},
описывает правило, которому будут подчинены клиентские запросы относительно веб-сайта. Правило содержит параметры шаблона: controller, action
и id
. Первые два из них — это стандартные параметры MVC Framework, которые позволяют задавать в шаблоне определение контроллера и действия соответственно. Параметр id
— это пользовательский параметр, который будет передан действию. Например, при обращении к сайту sample.domain по следующему адресу http://sample.domain/home/index/5 механизм маршрутизации сопоставит параметру шаблона controller
значение home, параметру action
— значение index, параметру id
— значение 5. На практике это будет означать следующее: механизм маршрутизации передаст механизму MVC Framework информацию о том, что в ответ на клиентский запрос необходимо вызвать действие Index
у контроллера HomeController
и передать действию 5 в виде значения параметра id
.
Значения параметров шаблона маршрута по умолчанию, которые задаются в MapRoute
в виде new { controller = "Home", action = "Index", id = "" }
, представляют собой значения для параметров маршрута, которые будут использованы в том в случае, когда клиентский запрос их не содержит. Например, если обратиться к ресурсу со следующим запросом http://sample.domain/About/, в котором определен только первый параметр из шаблона {controller}/{action}/{id}
, то механизм маршрутизации автоматически определит оставшиеся два на основании значений по умолчанию. То есть параметр controller
получит значение About, а параметры action
и id
значения Index и пустую строку соответственно. Другими словами, на основании значений параметров по умолчанию запрос http://sample.domain/About/ будет интерпретироваться механизмом маршрутизации как запрос http://sample.domain/About/Index/. Что приведет к вызову действия Index у контроллера AboutController
.
Здесь мы поверхностно рассмотрели работу механизма маршрутизации и то, как он участвует в работе с MVC Framework. В следующих разделах данной главы мы рассмотрим маршрутизацию более подробно.
- Маршрутизация и тестирование
- Улучшенный протокол локальных соединений (XNET)
- Chapter 16. Commercial products based on Linux, iptables and netfilter
- NETMAP target
- Internet Service Providers who use assigned IP addresses
- Специфика .NET Compact Framework: ADO.NET
- Формы Web ASP.NET
- При запуске Internet Explorer загружается какая-то непонятная страница. Как ее отключить?
- В ходе экспериментов отключил Internet Explorer, теперь не могу его включить
- Почему во время просмотра сайтов в Internet Explorer при прокрутке колесиком мыши страницу как бы листает волнами, а не ...
- 5.1.1. netconf
- 5.1.3. netstat