Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Начиная с версии .NET Framework 3.5 SP1, ASP.NET содержит новый механизм маршрутизации пользовательских запросов. Основным предназначением механизма маршрутизации является предоставление возможности осуществлять запросы к веб-приложению не на основании файлов и файловой структуры приложения, а на основании специально определенных шаблонов, которые называются маршрутами.

Механизм маршрутизации не является составной частью MVC Framework. Представленный в .NET Framework 3.5 SP1, этот механизм является составной частью ASP.NET и может быть использован в любом проекте ASP.NET, основанном как на WebForms, так и на MVC Framework.

И хотя маршрутизация — это не часть MVC Framework, тем не менее в проектах на базе MVC Framework она играет одну из ключевых ролей. Маршрутизация помогает перейти от запросов к файлам ASPX, к запросам на основании набора контроллеров и действий. Такой переход позволяет избавиться от зависимости от строки запроса, которая в классическом ASP.NET во многом определяла структуру приложения. Кроме того, с помощью маршрутизации проекты на базе MVC Framework изначально получают возможность формирования удобочитаемых URL, что имеет большое значение в оптимизации приложения для индексации поисковыми системами.

Основное назначение маршрутизации — это обработка пользовательских запросов и представление их в удобном для разработчика виде. Но при разработке проектов на базе MVC Framework маршрутизация может стать удобным инструментом и для других целей: обеспечения безопасности доступа, валидации параметров и данных запросов, организации потоков данных.

Маршрутизация в 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.

Поделиться:
Популярные книги

Жребий брошен

Прозоров Александр Дмитриевич
10. Ведун
Фантастика:
фэнтези
8.90
рейтинг книги
Жребий брошен

Неучтенный элемент. Том 7

NikL
7. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 7

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
7.33
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Тринадцатый

Северский Андрей
Фантастика:
фэнтези
рпг
7.12
рейтинг книги
Тринадцатый

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Черный Рассвет

Кейн Рейчел
12. Морганвилльские вампиры
Фантастика:
ужасы и мистика
8.94
рейтинг книги
Черный Рассвет

Страж Кодекса

Романов Илья Николаевич
1. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса

Кодекс Крови. Книга ХVII

Борзых М.
17. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Кодекс Крови. Книга ХVII

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.25
рейтинг книги
Чужая семья генерала драконов

Правь, Британия!

дю Морье Дафна
Проза:
современная проза
6.25
рейтинг книги
Правь, Британия!

Николай Гоголь

Труайя Анри
Проза:
историческая проза
6.40
рейтинг книги
Николай Гоголь

Иисус неизвестный

Мережковский Дмитрий Сергеевич
Научно-образовательная:
философия
4.00
рейтинг книги
Иисус неизвестный

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Кодекс Крови. Книга ХVI

Виконт. Книга 4. Колонист

Юллем Евгений
Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.50
рейтинг книги
Виконт. Книга 4. Колонист