Маршрутизация URL c ASP.NET 4 Web Forms (из серии статей про VS 2010 и .NET 4.0)


[Помимо блога, я в последнее время еще использую Twitter, чтобы публиковать краткие заметки и новые ссылки. Следить за моими публикациями на Twitter вы можете здесь: http://www.twitter.com/scottgu (@scottgu - это мой псевдоним на twitter)]

Это восьмая из серии статей про грядущий выпуск VS 2010 и .NET 4. В сегодняшней публикации я расскажу об одной замечательной возможности среды времени выполнения ASP.NET 4, а именно о возможности использовать маршрутизацию URL (URL routing) со страницами на базе Web Forms.

Что такое маршрутизация URL?

Маршрутизация URL - это возможность, впервые появившаяся в ASP.NET 3.5 SP1 и активно применяемая в приложениях ASP.NET MVC, чтобы сделать используемые в них URL ясными и учитывающими поисковую оптимизацию - в стиле “web 2.0”. Маршрутизация URL позволяет настроить приложение на прием запросов с URL, которые не соответствуют реальным файлам приложения. Вместо этого вы можете с помощью маршрутизации определить URL, которые семантически значимы для пользователей и могут помочь в поисковой оптимизации сайтов.

К примеру, URL для обычной страницы, отображающей категории продуктов, мог бы выглядеть так:

http://www.mysite.com/products.aspx?category=software

С использованием движка маршрутизации URL в ASP.NET 4 вы сможете для отображения той же информации настроить приложение на прием таких запросов:

http://www.mysite.com/products/software

В ASP.NET 4.0 запросы, как в приведенном примере, могут быть сопоставлены как с классами-контроллерами ASP.NET MVC, так и со страницами на базе ASP.NET Web Forms.

Сопоставление запросов с использованием ASP.NET MVC

Движок маршрутизации URL, появившийся в ASP.NET 3.5 SP1, предоставляет мощные возможности для обработки входящих запросов. Обычно для регистрации/отображения URL, соответствующих определенному формату, и сопоставленных с ними обработчиков вам приходилось писать код, выполняемый при запуске приложения.

Ниже приведен пример того, как сегодня вы можете использовать ASP.NET MVC для сопоставления URL /products/software с классом-контроллером под названием “Products”, у которого есть метод “Browse”:

step1

Первый параметр “products-browse” вспомогательного метода MapRoute() является дружественным именем маршрута. Второй параметр “products/{category}” - это фильтр для URL, соответствующий URL /products/software и рассматривающий второй сегмент URL как значение параметра “category”. Этот параметр затем будет передан на обработку в метод Browse() класса ProductsController.

Сопоставление запросов с использованием ASP.NET Web Forms

Теперь ASP.NET 4.0 также позволяет использовать движок маршрутизации URL для сопоставления не только с контроллерами ASP.NET MVC, но и со страницами на базе ASP.NET Web Forms.

Ниже приведен пример того, как вы можете использовать новый вспомогательный метод MapPageRoute() в ASP.NET 4.0 для сопоставления URL /products/software со страницей “Products.aspx”, расположенной в корневом каталоге приложения:

step2

Здесь первые два параметра вспомогательного метода MapPageRoute() - те же, что и у MapRoute(). Первый параметр представляет дружественное имя маршрута, а второй задает формат URL для поиска соответствий. Третий параметр, между тем, указывает на страницу Products.aspx, которая будет обрабатывать запросы вместо класса-контроллера. Вы также можете указать MapPageRoute() дополнительные параметры, чтобы воспользоваться преимуществами “ограничений маршрута” и предоставить “значения параметров по умолчанию” точно так же, как вы можете сделать это в регистрациях маршрутов на базе ASP.NET MVC.

Для страницы Products.aspx вы затем можете написать код, как в примере ниже, использующий свойство Page.RouteData в ASP.NET 4.0 для получения значения параметра “category”, сопоставленного с фильтром URL /products/{category}, и после этого связать полученное значение с категориями продуктов, чтобы отобразить их:

step3

В дополнение к программному доступу к параметрам входящих запросов при помощи кода, как в примере выше, вы также можете воспользоваться преимуществами нового декларативного элемента управления <asp:routeparameter> с любым элементом управления ASP.NET, использующим DataSource, чтобы декларативно связать его со значением из маршрута. К примеру, ниже мы используем выражение с <asp:routeparameter>, чтобы связать параметр @category оператора select с параметром /products/{category} в маршруте:

step4

Получение URL запросов из ASP.NET Web Form

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

В примере выше когда мы устанавливали соответствие для URL /products/{category}, мы дали маршруту “дружественное имя” “products-browse”. Это позволяет нам теперь также использовать новый вспомогательный метод Page.GetRouteUrl(), чтобы найти маршрут в системе маршрутизации URL, опционально указывая его параметры, и затем получить настоящий URL, который соответствует нашему сгенерированному URL на базе маршрута. Например, нижеприведенный код получит URL “/products/software”:

step6

Вы можете обращаться к упомянутому вспомогательному методу как из ваших файлов code-behind, так и из файлов .aspx.

Теперь также появился нобор методов Response.RedirectToRoute(), которые вы можете использовать, чтобы перенаправить пользователей по определенному маршруту (независимо от того, обрабатывается ли этот маршрут приложением на базе MVC или Web Forms) и при желании передать ему дополнительные параметры.

Обработка сценариев с использованием обратной передачи

Маршрутизация URL в ASP.NET 4.0 полностью поддерживает сценарии с использованием обратной передачи (PostBack). Элемент управления <form runat=”server”> автоматически сгенерирует тот же URL, что привел к рендерингу страницы. К примеру, если вы получаете доступ к странице с помощью URL /products/software, то любой выполняющийся на стороне сервера элемент управления <form runat=”server”> на этой странице сгенерирует для клиента HTML-элемент <form action=”/products/software”> - это означает, что любые сценарии с использованием обратной передачи сохранят исходный URL страницы.

За счет этого становится по-настоящему просто поддеживать в сценариях с использованием обратной передачи и Web Forms ясные, учитывающие поисковую оптимизацию URL, и у вас пропадет необходимость использовать различные трюки, к которым сегодня прибегают разработчики, чтобы достичь аналогичных эффектов при работе с модулями переписывания URL (URL rewriting modules).

Резюме

В ASP.NET 4.0 стало по-настоящему просто реализовать ясные, поддерживающие поисковую оптимизацию URL как в приложениях ASP.NET MVC, так и ASP.NET Web Forms (у вас также могут быть приложения, сочетающие эти два подхода).

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

Надеюсь, вы нашли для себя что-то полезное,

Скотт

оригинал статьи

Skip to main content