Asp.net mvc framework
Шрифт:
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, который определяет в таблице правило игнорирования маршрута для запросов, содержащих ссылки
Во-вторых, вызывается метод расширения 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. В следующих разделах данной главы мы рассмотрим маршрутизацию более подробно.
Механизмы маршрутизации
В начале главы мы упомянули об основных классах, которые составляют механизм маршрутизации. В этой части главы мы рассмотрим их более подробно.
Маршрут и класс Route
Маршрут в понятии ASP.NET — это строка, которая представляет собой шаблон URL-строки запроса к веб-приложению. Этот шаблон определяет, какие запросы попадают под понятие данного маршрута, а какие нет. Шаблоны маршрутов содержат параметры, имена которых заключены в фигурные скобки. Обычно параметры разделены обратным слэшем (/) как разделяющие сегменты URL-строки.
Например, маршрут, определенный следующим образом admin/{user}/{action}, содержит два параметра: user и action. Такому маршруту могут соответствовать следующие строки URL:admin/foo/add/ илиГде foo и bee определяются как значения параметра user, а add и edit — параметра action.Механизм MVC Framework определяет два базовых параметра маршрутов: controller и action, которые предназначены для определения разработчиком месторасположения наименования контроллера и действия в строке запроса. Остальные параметры являются пользовательскими и определяются разработчиком. Например, следующий маршрут {controller}/{action}/{user}/{page} определяет кроме базовых параметров controller и action еще два пользовательских: user и page. Такому маршруту может соответствовать строка запросаМеханизм MVC Framework при сопоставлении данных маршрутов и строки запроса определит, что требуется вызвать действие с именем GetUserMessages в контроллере с именем UserController, которому нужно передать два параметра: user со значением user1 и page со значением 2.
Одним из базовых классов маршрутизации ASP.NET является класс Route, который позволяет разработчику определить свойства маршрута. Рассмотрим основные свойства, которые содержит класс Route:
? Constraints — свойство типа RouteValueDictionary, которое хранит все ограничения, накладываемые разработчиком на маршрут;
? DataTokens — свойство типа RouteValueDictionary, которое хранит набор параметров, не участвующих в разборе шаблона, но передающихся обработчику маршрута как дополнительная информация;
? Defaults — свойство типа RouteValueDictionary, которое хранит значения параметров маршрута по умолчанию. Данные значения используются, когда определенная для маршрута строка URL не содержит необходимого параметра;
? RouteHandler — свойство, реализующее интерфейс IRouteHandler, является обработчиком маршрута, который определяет, подходит или нет заданный URL запроса к маршруту;
? Url — строковое свойство, которое содержит определение шаблона маршрута.
Создание экземпляра Route не вызывает трудностей, например, в следующем фрагменте представлено создание маршрута, аналогичного тому, что создается в проекте MVC Framework по умолчанию:
var defaults = new RouteValueDictionary
{
{"controller", "Home"},
{"action", "Index"},
{"id", ""}
};
routes.Add(new Route(
"{controller}/{action}/{id}",
defaults,
null,
null,
new MvcRouteHandler
));
Класс Route имеет несколько конструкторов, конструктор с самым большим числом параметров определен так:
public Route(string url,
RouteValueDictionary defaults,
RouteValueDictionary constraints,
RouteValueDictionary dataTokens,
IRouteHandler routeHandler
)
Рассмотрим параметры, которые передаются в этот конструктор:
? url — обязательный параметр, определяет строку шаблона для маршрута;
? defaults — необязательный параметр, определяет значения по умолчанию для параметров маршрута;
? constraints — необязательный параметр, определяет ограничения для маршрута;
? dataTokens — необязательный параметр, определяет дополнительные данные для маршрута;
? routeHandler — обязательный параметр, определяет обработчик, реализующий интерфейс IRouteHandler для обработки маршрута. В MVC Framework обработчиком по умолчанию является класс MVCRouteHandler.
Коллекция маршрутов и класс RouteCollection
Для того чтобы механизм MVC Framework начал работать с маршрутом, который определяет пользователь, необходимо, чтобы маршрут попал в таблицу маршрутизации. Такая таблица основывается на классе RouteCollection, который представляет собой коллекцию маршрутов.