Книга: ASP.NET MVC Framework
Ограничения параметров маршрута и свойство Constraints
Ограничения параметров маршрута и свойство Constraints
Свойство Constraints
определяет набор параметров, которые служат ограничителями для параметров маршрута. Рассмотрим пример: при создании проекта вы определяете маршрут, один из параметров которого указывает логин пользователя. Согласно правилам вашего ресурса логин пользователя не может содержать менее 4 символов в виде букв и цифр. Поэтому все запросы, которые попадают под ваш маршрут и содержат параметр логина пользователя с тремя или менее символами либо с недопустимыми символами, вы рассматриваете как ошибочно сформированные. Задача по обработке такой ситуации идеально вписывается в механизм ограничений маршрутов, который представлен свойством Constraints
.
Чтобы решить задачу с ограничением на длину имени логина в запросе, нужно определить следующее ограничение в свойстве Constraints
при создании маршрута:
var constraint = new RouteValueDictionary {
{"user", "w{4,}"}
};
routes.Add(new Route(
"{controller}/{action}/{user}/",
defaults,
constraint,
null,
new MvcRouteHandler()
Ограничение определяется как элемент словаря RouteValueDictionary
, где ключом является имя параметра, а значением регулярное выражение, описывающее правило для параметра. В данном случае регулярное выражение w{4,}
предполагает, что строка должна содержать буквы и цифры в размере от 4 элементов.
После такого определения маршрута, если вы попытаетесь обратиться по следующему адресу http://sample.domain/Home/Index/foo, вы получите стандартное сообщение браузера о возвращенной сервером ошибке с кодом 404 "Страница не найдена".
Ранее в этой главе мы рассмотрели ограничения параметров как коллекцию регулярных выражений в свойстве Constraints
класса Route
. Однако существует еще один, альтернативный, способ создания маршрута на базе интерфейса iRouteConstraint
. Он также описан в этой главе. Вместо того чтобы добавлять в коллекцию Constraints
строки с регулярными выражениями, можно воспользоваться интерфейсом IRouteConstraint
и реализовать класс, который будет выполнять проверку параметров на соответствие условиям. Добавляется такой класс похожим на обычный способом:
routes.MapRoute("Default",
"{controller}/{action}/{user}",
new {controller = "Home",
action = "Index",
id = ""},
new {user = new SampleConstraint()}
Здесь SampleConstraint
— это класс, который реализует интерфейс IRouteConstraint
.
- Единое имя файла параметров InterBase
- 4. Ограничения ссылочной целостности
- Использование параметров библиотек документов
- Настройка основных параметров BIOS
- Настройка дополнительных параметров BIOS
- Пропуск параметров типа
- Использование модификаторов параметров ref и out
- 3.6.3. Изменение параметров сетевого подключения
- Настройка параметров
- Настройка параметров лизинга на стороне сервера
- Настройки параметров страницы
- Настройка параметров правописания