Книга: ASP.NET MVC Framework
Ограничения и интерфейс IRouteConstraint
Ограничения и интерфейс IRouteConstraint
Интерфейс IRouteConstraint
предназначен для определения объекта ограничения, который, основываясь на некоторой логике, определяет, подходит или нет значение параметра URL маршруту, которому присваивается это ограничение. Проще говоря, IRouteConstraint
позволяет определить объект и сопоставить его имени параметра маршрута. Задачей этого объекта является проверка значений параметра на соответствие неким условиям. MVC Framework при сопоставлении URL запроса маршруту последовательно вызывает все зарегистрированные объекты, реализующие IRouteConstraint
, и таким образом проверяет, подходит ли данный набор параметров URL рассматриваемому маршруту.
Интерфейс IRouteConstraint
задает всего один метод Match
, который имеет следующее определение:
bool Match(
HttpContextBase httpContext,
Route route, string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
Метод Match
должен содержать логику проверки параметра строки URL запроса на соответствие некоторым условиям. Match
должен вернуть true в случае, когда значение параметра соответствует условиям, и false в обратном случае. При вызове методу Match
передаются следующие параметры:
? httpContext
— контекст запроса в виде экземпляра класса HttpContextBase
;
? route
— маршрут, к которому применяется данное ограничение;
? parameterName
— имя параметра, значение которого следует проверить на условия ограничения;
? values
— коллекция значений параметров запроса;
? routeDirection
— параметр, определяющий текущее поведение механизма маршрутизации: обработку клиентского запроса или создание строки URL на базе маршрутов.
Основываясь на перечисленных параметрах, метод Match
должен определить, подходит ли значение параметра из строки URL для параметра маршрута.
Рассмотрим работу интерфейса на примере:
public class SampleConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
bool result = false;
if (parameterName == "user")
{
if (values["user"].ToString().Length >= 4) result = true;
}
return result;
}
}
Данный класс SampleConstraint
реализует интерфейс IRouteConstraint
и определяет метод Match
. В этом методе происходит проверка значения параметра под именем user
. Если длина значения параметра менее 4 символов, то возвращается false, который указывает, что параметр не прошел проверку, в ином случае возвращается true, что говорит о прохождении параметров проверки на условия. Образно говоря, этот класс проверяет длину строки имени пользователя, которая была передана в строке URL запроса.
Для того чтобы использовать этот класс ограничения, необходимо сопоставить его маршруту следующим образом:
routes.MapRoute("Default",
"{controller}/{action}/{user}",
new {controller = "Home", action = "Index", id = ""},
new {user = new SampleConstraint() }
По этому определению маршрута будет следовать, что запрос со строкой URL http://sample.domain/Home/Index/user1 обработается, а запрос http://sample.domain/Home/Index/foo будет отклонен на этапе работы ограничения SampleConstraint, т. к. значение foo, определяющее параметр маршрута user, содержит менее 4 символов.
- Ограничения параметров маршрута и свойство Constraints
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- 5.21 IP-адреса, интерфейсы и множественное пребывание
- Множественные интерфейсы и имена методов
- 4. Ограничения ссылочной целостности
- 2.1 Интерфейс SCSI
- 2.2 Интерфейсы IDE, EIDE и АТА
- 7.2 Интерфейс WMI
- 7.5 Программные интерфейсы приложений для адаптеров шины
- Не допускайте того, чтобы поток пользовательского интерфейса блокировался на длительное время
- Абстрактные базы как двоичные интерфейсы
- Интерфейсы накопителей на жестких магнитных дисках