Литмир - Электронная Библиотека

RedirectToRoute

Имя маршрута используется для возврата результата действия в виде RedirectToRouteResult с помощью стандартного метода контроллера RedirectToRoute. Назначение RedirectToRoute — это перенаправление выполнения запроса с одного маршрута на другой. На самом деле, для переадресации на другой маршрут MVC Framework на основании переданного имени маршрута генерирует строку URL, которая соответствует новому маршруту и производит возврат клиенту ответа в виде требования на переадресацию на новый URL (redirect).

К примеру, допустим определен маршрут с именем AccountLogOn так, как показано далее:

routes.MapRoute(

  "AccountLogOn",

  "Account/LogOn",

  new { controller = "Account", action = "LogOn" }

);

В этом случае вызов RedirectToRoute, который переадресует пользователя на новый маршрут, будет выглядeть так:

public ActionResult SomeAction()

{

  return RedirectToRoute("AccountLogOn");

}

После выполнения действия SomeAction пользователь будет перенаправлен на URL Account/LogOn, согласно определению маршрута AccountLogOn.

AjaxHelper

В методах расширения класса AjaxHelper, таких как BeginRouteForm и RouteLink, имя маршрута используется для генерации строки запроса.

BeginRouteForm — это метод расширения, который позволяет упростить создание формы для отправки результатов через Ajax.BeginRouteForm в данном смысле является аналогом BeginForm другого метода расширения класса AjaxHelper, который строит форму на основании определенных значений контроллера и действия. В случае, когда вызывается BeginRouteForm, механизм класса AjaxHelper формирует на базе имени маршрута строку URL и подставляет ее атрибуту action при рендеринге формы в представлении.

RouteLink — это метод расширения, позволяющий упростить создание ссылки в представлении, которая осуществляла бы Ajax-запросы. Роль имени маршрута при работе RouteLink точно такая же, как и в BeginRouteForm — по имени маршрута строится URL-строка, которая рендерится в представлении в виде атрибута href.

UrlHelper

В методе расширения RouteUrl класса UrlHelper имя маршрута используется для создания строки URL, соответствующей маршруту.

Шаблон маршрута и свойство Url

При создании маршрута строковый параметр Url определяет шаблон маршрута, который, как правило, задает некоторую группу возможных клиентских запросов. Следует учитывать, что при наличии нескольких маршрутов механизм маршрутизации ASP.NET всегда выбирает самый первый из них — тот, что был добавлен в таблицу маршрутизации первым.

Как мы уже говорили, по умолчанию MVC Framework создает один-единственный маршрут с именем Default и шаблоном {controller}/{action}/{id}. Этот маршрут хорош тем, что он один позволяет обрабатывать большую часть возможных пользовательских запросов. По сути такой шаблон говорит о том, что данный маршрут определяет все запросы с вложениями до третьего уровня, т. е. этот маршрут обработает и http://sample.domain/level1/ и http://sample.domain/level1/level2/, и http://sample.domain/level1/level2/level3/, где level1, level2 и level3 могут принимать любые значения. На самом деле это очень большое количество возможных запросов и на практике один маршрут Default покрывает все требования разработчиков к маршрутизации.

Однако разработчик может добавить гибкости своему проекту и улучшить представления строк URL, если определит свои маршруты. Далее представлено два подобных маршрута:

routes.MapRoute(

  "AccountLogOn",

  "LogOn",

  new { controller = "Account", action = "LogOn" }

);

routes.MapRoute(

  "Home",

  "{action}",

  new { controller = "Home", action = "Index" }

);

Первый вызов MapRoute создает маршрут под наименованием AccountLogOn, шаблон которого четко соответствует только одному возможному клиентскому запросу http://sample.domain/Logon. Второй вызов создает маршрут Home более широкого определения. Под этот маршрут попадают все клиентские запросы вида http://sample.domain/Home/{action}.

Польза от создания таких маршрутов очевидна. Имея набор именованных маршрутов, которые четко определяют область клиентских запросов, а не обхватывают все запросы подряд, вы можете более гибко управлять маршрутами. Например, теперь для простого перенаправления на страницу входа в систему вам достаточно будет вызвать следующий метод:

public ActionResult SomeAction()

{

  return RedirectToRoute("AccountLogOn");

}

Другим видимым преимуществом этого маршрута является то, что согласно ему клиентский запрос не обязательно должен содержать в себе наименование контроллера. Таким образом, путь http://some.domain/Account/LogOn уменьшается до http://some.domain/LogOn, что придает ссылкам вебприложения более компактный вид. Компактность строк запросов может играть свою роль в случае, когда в большом веб-приложении используются десятки контроллеров с массой действий и параметров.

Значения параметров маршрута по умолчанию и свойство Defaults

Свойство Defaults определяет набор параметров, сопоставляемых параметрам маршрута по умолчанию, в случае, когда URL строки запроса их не содержит. Рассмотрим для примера маршрут {controller}/{action}/{id}, создаваемый в проектах MVC Framework по умолчанию. При его создании свойство Defaults было инициализировано с помощью метода расширения MapRoute следующим значением:

new { controller = "Home", action = "Index", id = "" }

На практике это будет означать, что механизм MVC Framework одинаково обработает запросы http://sample.domain/Home/Index/, http://sample.domain/Home/ и http://sample.domain/. Все эти запросы приведут к вызову действия Index в контроллере HomeController. Это стало возможным, поскольку были определены значения по умолчанию для параметров маршрута controller и action. В связи с этим URL http://sample.domain/ при сопоставлении маршруту дополучит часть параметров из словаря Defaults, став, таким образом, равнозначным запросу http://sample.domain/Home/Index/.

Ограничения параметров маршрута и свойство Constraints

Свойство Constraints определяет набор параметров, которые служат ограничителями для параметров маршрута. Рассмотрим пример: при создании проекта вы определяете маршрут, один из параметров которого указывает логин пользователя. Согласно правилам вашего ресурса логин пользователя не может содержать менее 4 символов в виде букв и цифр. Поэтому все запросы, которые попадают под ваш маршрут и содержат параметр логина пользователя с тремя или менее символами либо с недопустимыми символами, вы рассматриваете как ошибочно сформированные. Задача по обработке такой ситуации идеально вписывается в механизм ограничений маршрутов, который представлен свойством Constraints.

47
{"b":"971383","o":1}