Главная страница   /   13.2. Введение в URL паттерны (ASP.NET MVC 4

ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

13.2. Введение в URL паттерны

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

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

http://mysite.com/Admin/Index

URL-адреса могут быть разбиты на сегменты. Это части URL, исключая хост и строку запроса, разделенные символом «/». В URL из примера есть два сегмента, как показано на рисунке 13-2.

Рисунок 13-2: Сегменты URL из примера

Первый сегмент содержит слово Admin, а второй сегмент содержит слово Index. Для нас очевидно, что первый сегмент относится к контроллеру, а второй сегмент – к действию. Но, конечно, мы должны выразить эти отношения таким образом, чтобы система маршрутизации могла это понять. Вот URL паттерн, который делает это:

{controller}/{action}

При обработке входящего запроса работа системы маршрутизации заключается в том, чтобы запрошенный URL подходил паттерну, а также в извлечении значения из URL для переменных сегмента, определенных в шаблоне. Сегментные переменные выражаются при помощи фигурных скобок ({}). Например, в паттерне есть две сегментные переменные с именами controller и action, и поэтому значение сегментной переменной controller будет Admin, а значение переменной сегмента action будет Index.

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

Примечание

Система маршрутизации не имеет специальных знаний о контроллерах и действиях. Она просто извлекает значения для сегментных переменных и передает их по каналу запросов. А затем в канале обработки запросов, если запрос достигает MVC фреймворка, это значение присваивается переменным controller и action. Именно поэтому система маршрутизации может быть использована с Web Forms и Web API (Web API рассматривается в главе 25).

По умолчанию URL паттерн будет соответствовать любому URL, который имеет правильное количество сегментов. Например, паттерн {controller}/{action} будет соответствовать любому URL, который имеет два сегмента, как показано в таблице 13-1.

Таблица 13-1: Подходящие URL
URL запроса Переменные сегмента
http://mysite.com/Admin/Index controller = Admin, action = Index
http://mysite.com/Index/Admin controller = Index, action = Admin
http://mysite.com/Apples/Oranges controller = Apples, action = Oranges
http://mysite.com/Admin Нет соответствий: слишком мало сегментов
http://mysite.com/Admin/Index/Soccer Нет соответствий: слишком много сегментов

В таблице 13-1 выделены два ключевых вида поведения URL паттернов:

  • URL паттерны консервативны: они будут соответствовать только тем URL, которые имеют одинаковое число сегментов, что и нужный паттерн. Вы можете увидеть это в четвертом и пятом примерах в таблице.
  • URL паттерны либеральны. Если URL имеет правильное количество сегментов, паттерн извлечет значение для сегментной переменной, каким бы оно ни было.

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

Как мы уже упоминали, система маршрутизации ничего не знает об MVC приложении, поэтому URL паттерн найдет соответствие, даже если нет контроллера и действия, которые подходят значениям, извлеченным из URL. Мы показали это во втором примере в таблице 13-1. Мы поменяли сегменты URL Admin и Index, поэтому и значения, извлекаемые из URL, также меняются местами, хотя в примере нет никакого контроллера Index.