Настройка значений по умолчанию для параметров маршрутов
При определении маршрута можно назначать для параметров значения по умолчанию. Значение по умолчанию используется, если значение параметра не указано в URL-адресе. Значения по умолчанию для маршрута устанавливаются путем присвоения словаря свойству Defaults класса Route. В следующем примере приведен маршрут со значениями по умолчанию.
void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); }
public static void RegisterRoutes(RouteCollection routes) { routes.Add(new Route ( "Category/{action}/{categoryName}" new CategoryRouteHandler() ) { Defaults = new RouteValueDictionary {{"categoryName", "food"}, {"action", "show"}} } ); }
|
При обработке URL-запроса механизмом маршрутизации ASP.NET определение маршрута, приведенное в примере (с заданными по умолчанию значениями food для categoryName и show для action), возвращает результаты, представленные в следующей таблице.
Рисунок 2
Добавление ограничений к маршрутам
Помимо соответствия URL-запроса определению маршрута по количеству параметров в URL-адресе, можно указать, что значения параметров должны соответствовать определенным ограничениям. Если URL-адрес содержит значения, находящиеся за пределами установленных для маршрута ограничений, этот маршрут не используется для обработки запроса. Введение ограничений позволяет обеспечить соответствие значений, содержащихся в параметрах URL-адреса, требованиям приложения.
Ограничения определяются с использованием регулярных выражений или с использованием объектов, реализующих интерфейс IRouteConstraint. При добавлении определения маршрута в коллекцию Routes ограничения добавляются путем создания объекта RouteValueDictionary, содержащего тест проверки. Затем этот объект назначается в качестве значения свойства Constraints. Ключ в словаре идентифицирует параметр, к которому применяется ограничение. В качестве значения в словаре можно использовать либо строку, представляющую регулярное выражение, либо объект, реализующий интерфейс IRouteConstraint.
При использовании строки механизм маршрутизации воспринимает ее как регулярное выражение и проверяет допустимость значения параметра, вызывая метод IsMatch класса Regex. Регулярное выражение всегда рассматривается без учета регистра. Дополнительные сведения см. в разделе Регулярные выражения в .NET Framework.
При использовании объекта IRouteConstraint механизм маршрутизации ASP.NET проверяет допустимость значения параметра, вызывая метод Match объекта IRouteConstraint. Метод Match возвращает логическое значение, указывающее на допустимость значения.
В следующем примере приведены ограничения, задающие диапазон значений параметров locale и year.
void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); }
public static void RegisterRoutes(RouteCollection routes) { routes.Add(new Route ( "{locale}/{year}" , new ReportRouteHandler() ) { Constraints = new RouteValueDictionary {{"locale", "[a-z]{2}-[a-z]{2}"},{year, @"\d{4}"}} }); }
|
При обработке URL-запроса механизмом маршрутизации определение маршрута, приведенное в предыдущем примере, возвращает результаты, представленные в следующей таблице.
Рисунок 3
