Практическое руководство. Определение маршрута.

Visual Studio 2010

Обновлен: Ноябрь 2007

Маршрутизация ASP.NET используется для обработки URL-запросов, не сопоставляемых с физическим файлом на веб-узле. Маршрут создается путем определения шаблона URL-адреса и указания обработчика, вызываемого в ответ на запрос.

При определении маршрута можно указать значения по умолчанию, которые могут использоваться при отсутствии параметра в URL-запросе. Можно также задать ограничения, чтобы обеспечить допустимость значений параметров.

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

Маршрут создается, чтобы настроить соответствие шаблону URL и указать, каким образом следует обрабатывать запросы для этого шаблона URL.

Создание маршрута

  1. Добавьте в файл Global.asax метод, создающий экземпляр класса Route. В конструкторе класса установите в качестве значения параметра url шаблон URL, используемый для сопоставления URL-запросов, и установите в качестве значения параметра routeHandler экземпляр класса, обрабатывающего запрос.

    Можно также добавить в шаблон URL универсальный параметр, если нужно сопоставлять маршрут URL-запросу, даже если запрос включает больше параметров, чем определено в маршруте. Чтобы добавить универсальный параметр, введите перед именем последнего параметра звездочку (*).

  2. Если нужно указать значения по умолчанию для параметров маршрута, установите значение свойства Defaults.

  3. Если нужно проверить значения параметра маршрута, установите для свойства Constraints одно из нижеперечисленных значений.

    • Строка, определяющая регулярное выражение. В регулярном выражении регистр не учитывается.

    • Объект, реализующий интерфейс IRouteConstaint и включающий метод Match.

  4. Добавьте объект Route в свойство Routes объекта RouteTable. Чтобы задать имя для маршрута, вызовите метод Add; в противном случае вызовите метод Add.

  5. В обработчике Application_Start в файле Global.asax вызовите метод, добавленный на первом шаге.

В следующем примере показан метод RegisterRoutes, вызываемый из обработчика Application_Start в файле Global.asax. Этот метод добавляет два объекта Route, каждый из которых имеет параметр года и языка. При создании URL-адреса маршруты можно отличать по имени. В примере показывается добавление этих маршрутов в качестве именованных маршрутов. Кроме того, эти маршруты имеют ограничения, значения по умолчанию и универсальный параметр.

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add("SalesRoute", new Route
    (
         "SalesReport/{locale}/{year}/{*queryvalues}"
         , new SalesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
    routes.Add("ExpensesRoute", new Route
    (
         "ExpensesReport/{locale}/{year}/{*queryvalues}"
         , new ExpensesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
}
Показ: