Создание доступных для чтения 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
Поиск выполняется следующим образом:
- Существует ли файл с путем и именем /a/b/c.cshtml? Если это так, запустите страницу и не передайте ей никаких сведений. В противном случае...
- Существует ли файл с путем и именем /a/b.cshtml? Если да, запустите страницу и передайте ей значение
c
. Иначе... - Существует ли файл с путем и именем /a.cshtml? Если да, запустите страницу и передайте ей значение
b/c
.
Если поиск не нашел точных совпадений для файлов .cshtml в указанных папках, ASP.NET продолжает поиск этих файлов по очереди:
- /a/b/c/default.cshtml (без сведений о пути).
- /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.