Ситуации, в которых маршрутизация не применяется
По умолчанию механизм маршрутизации не обрабатывает запросы, сопоставляемые существующему физическому файлу на веб-сервере. Например, запрос http://server/application/Products/Beverages/Coffee.aspx не обрабатывается механизмом маршрутизации, если по адресу Products/Beverages/Coffee.aspx существует физический файл. Механизм маршрутизации не обрабатывает запрос, даже если он соответствует определенному шаблону, например {controller}/{action}/{id}.
Если необходимо, чтобы механизм маршрутизации обрабатывал все запросы, включая запросы, которые указывают на файлы, можно переопределить заданную по умолчанию функциональность, задав для свойства RouteExistingFiles объекта RouteCollection значение true. При присвоении значения true все запросы, соответствующие заданному шаблону, обрабатываются механизмом маршрутизации.
Можно также настроить механизм маршрутизации таким образом, чтобы он не обрабатывал некоторые URL-запросы. Для того чтобы механизм маршрутизации не обрабатывал определенные запросы, нужно определить маршрут и указать, что для обработки этого шаблона следует использовать класс StopRoutingHandler. При обработке запроса объектом StopRoutingHandler объект StopRoutingHandler блокирует дополнительную обработку запроса в качестве маршрута. Вместо этого запрос обрабатывается как страница ASP.NET, веб-служба или другая конечная точка ASP.NET. Например, чтобы не допустить обработки механизмом маршрутизации запросов файла WebResource.axd, можно добавить следующее определение маршрута.
public static void RegisterRoutes(RouteCollection routes) { routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRouteHandler())); }
|
Создание url-адресов из маршрутов
Если необходимо централизовать логику построения URL-адресов, то для формирования URL-адресов можно использовать маршруты. URL-адрес создается путем передачи значений параметров в виде словаря в метод GetVirtualPath объекта RouteCollection. Метод GetVirtualPath ищет первый маршрут в объекте RouteCollection, соответствующий параметрам в словаре. Соответствующий маршрут используется для формирования URL-адреса. Определение маршрута приведено в следующем примере.
public static void RegisterRoutes(RouteCollection routes) { routes.Add(new Route ( "Category/{action}/{categoryName}" new CategoryRouteHandler() ) { Defaults = new RouteValueDictionary {{"categoryName", "food"}, {"action", "show"}} } ); }
|
В следующем примере приведен код элемента управления, создающего URL-адрес на основе маршрута.
HyperLink1.NavigateUrl = RouteTable.Routes.GetVirtualPath (context, new RouteValueDictionary { { "categoryName", "beverages" }, {"action", "summarize" }} ).VirtualPath;
|
В результате выполнения этого кода элемент управления HyperLink1 будет содержать значение "Category/summarize/beverages" в свойстве NavigateUrl.
При создании URL-адреса из маршрута можно указать, какой маршрут следует использовать, с помощью его имени. Дополнительные сведения см. в разделе Практическое руководство. Построение URL-адреса из маршрута..
