Определение маршрутов. Работа с маршрутами.
Установкой маршрутов занимается статический метод RegisterRoutes. Вызывается этот метод файле Global.asax в методе Application_Start.
Далее идет собственно определение маршрута по умолчанию. Метод routes.MapRoute выполняет сопоставление маршрута запросу. В перегруженных версиях данного метода мы можем задать дополнительные параметры сопоставления.
Шаблон URL включает в себя несколько сегментов, которые заключены в фигурные скобки. В данном случае сегмент представляет часть запроса, которая находится между слешами. Каждый такой сегмент шаблона содержит параметр. Эти параметры называются параметрами URL. В данном случае это параметры controller, action и id. Но вообще параметры могут иметь различные имена, включающие любые алфавитно-цифровые символы.
Третий параметр метода routes.MapRoute - defaults определяет значения по умолчанию для маршрута.
defaults: new { controller = "Book", action = "Show", id = UrlParameter.Optional }
Последний параметр объявлен как необязательный id = UrlParameter.Optional, поэтому, если он не указан в строке запроса, он не будет учитываться
Генерация исходящих адресов URL.
Наиболее простой способ вывода адреса является использование анкора - элемента a:<a href="Home/Index/3" />
Но также мы можем использовать специальные хелперы рендеринга - Html.ActionLink и Html.RouteLink
Html.ActionLink
Хелпер ActionLink создает гиперссылку на действие контроллера. Если мы создаем ссылку на действие, определенное в том же контроллере, то можем просто указать имя действия: @Html.ActionLink("Жми здесь", «Имя_Метода",”Имя_контроллера”) Что создаст вам следующую разметку:
<a href="/ Имя_контроллера / Имя_Метода ">Жми здесь</a>
Html.RouteLink
Хелпер RouteLink использует похожий шаблон, что и ActionLink: он принимает имя маршрута, но не требует аргументов для имени контроллера и имени действия.
Чтобы использовать маршрут, нам просто надо указать имя определенного нами маршрута и затем определить при необходимости дополнительные параметры.
Создание собственного обработчика маршрутов.
Процесс маршрутизации состоит из следующих этапов:
Модуль UrlRoutingModule пытается сопоставить текущий запрос с маршрутами в таблице RouteTable.
Если сопоставление завершилось удачно, то модуль маршрутизации выбирает обработчик маршрутов сопоставленного маршрута - объект IRouteHandler.
Затем у объекта IRouteHandler вызывается метод GetHandler, который возвращает объект IHttpHandler, используемый для обработки запроса.
У обработчика IHttpHandler вызывается метод ProcessRequest для обработки запросов.