Книга: ASP.NET MVC Framework

Маршруты и валидация запросов

Маршруты и валидация запросов

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

Представьте себе ситуацию, когда вы создаете маршрут, одним из параметров которого является число, определяющее год. Совершенно очевидно, что такое число имеет допустимые рамки, и его валидность может быть проверена еще на этапе сопоставления маршрутов. В листинге 6.1 приведен фрагмент кода, который определяет экземпляр класса, реализующий IRouteConstraint для такого рода проверки параметра.

Листинг 6.1. Класс, реализующий IRouteConstraint

public class YearConstraint : IRouteConstraint {
  public bool Match(HttpContextBase httpContext,
      Route route,
      string parameterName,
      RouteValueDictionary values,
      RouteDirection routeDirection)
  {
    if (parameterName == "year")
    {
      try
      {
        object yearValue = values["year"];
        int year = Convert.ToInt32(yearValue);
        if (year >= 1900 && year <= 2100) return true;
      }
      catch
      {
        return false;
      }
    }
    return false;
  }
}

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

var constraints = new RouteValueDictionary
{
  {"year", new YearConstraint()}
};
routes.MapRoute("YearData",
                "{controller}/{action}/{year}",
                new { controller = "Data", action = "Index" },
                new { year = new YearConstraint() }

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

Оглавление книги


Генерация: 1.133. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз