Создание доступных для чтения URL-адресов на сайтах веб-страницы ASP.NET (Razor)

; автор — Том ФитцМакен (Tom FitzMacken)

В этой статье описывается маршрутизация на веб-сайте веб-страницы ASP.NET (Razor) и как это позволяет использовать URL-адреса, которые являются более удобочитаемыми и лучше для SEO.

Из этого руководства вы узнаете, как выполнять такие задачи:

  • Как ASP.NET использует маршрутизацию, чтобы использовать более удобочитаемые и доступные для поиска URL-адреса.

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

  • веб-страницы ASP.NET (Razor) 3

Это руководство также работает с веб-страницы ASP.NET 2.

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

URL-адреса страниц на сайте могут повлиять на то, насколько хорошо работает сайт. Url-адрес, который является "дружественным", может упростить использование сайта. Это также может помочь с поисковой оптимизацией (SEO) для сайта. ASP.NET веб-сайты включают возможность автоматического использования понятных URL-адресов.

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

  • http://www.contoso.com/Blog/blog.cshtml?categories=hardware
  • http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30

Сравните эти URL-адреса со следующими:

  • http://www.contoso.com/Blog/categories/hardware/
  • http://www.contoso.com/Blog/2009/November

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

URL-адреса для первого примера также указывают непосредственно на определенный файл (blog.cshtml). Если по какой-либо причине блог был перемещен в другую папку на сервере или если блог был перезаписан для использования другой страницы, ссылки будут неправильными. Второй набор URL-адресов не указывает на определенную страницу, поэтому даже если реализация блога или расположение меняется, URL-адреса по-прежнему будут действительными.

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

Принцип работы маршрутизации

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

Представьте, что кто-то отправляет запрос, используя этот URL-адрес:

http://www.contoso.com/a/b/c

Поиск выполняется следующим образом:

  1. Существует ли файл с путем и именем /a/b/c.cshtml? Если это так, запустите страницу и не передайте ей никаких сведений. В противном случае...
  2. Существует ли файл с путем и именем /a/b.cshtml? Если да, запустите страницу и передайте ей значение c . Иначе...
  3. Существует ли файл с путем и именем /a.cshtml? Если да, запустите страницу и передайте ей значение b/c .

Если поиск не нашел точных совпадений для файлов .cshtml в указанных папках, ASP.NET продолжает поиск этих файлов по очереди:

  1. /a/b/c/default.cshtml (без сведений о пути).
  2. /a/b/c/index.cshtml (без сведений о пути).

Примечание

Чтобы было ясно, запросы на определенные страницы (т. е. запросы с расширением имени файла .cshtml ) работают так же, как и ожидалось. Такой запрос http://www.contoso.com/a/b.cshtml будет выполнять страницу b.cshtml просто нормально.

Внутри страницы сведения о пути можно получить с помощью свойства страницы UrlData , которое является словарем. Представьте, что у вас есть файл с именем ViewCustomers.cshtml , и ваш сайт получает следующий запрос:

http://mysite.com/myWebSite/ViewCustomers/1000

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

<!DOCTYPE html>
<html>
    <head>
        <title>URLData</title>
    </head>
    <body>
      Customer ID: @UrlData[0].ToString()
    </body>
</html>

Примечание

Так как маршрутизация не включает полные имена файлов, может возникнуть неоднозначность, если у вас есть страницы с одинаковым именем, но с разными расширениями имени файла (например, MyPage.cshtml и MyPage.html). Чтобы избежать проблем с маршрутизацией, лучше убедиться, что на сайте нет страниц, имена которых отличаются только расширением.

Дополнительные ресурсы

WebMatrix — URL-адреса, UrlData и маршрутизация для SEO. Эта запись в блоге Майка Бринда содержит некоторые дополнительные сведения о том, как маршрутизация работает в веб-страницы ASP.NET.