Перейти к содержанию

Изучение синтаксиса шаблона маршрута

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

Использование дополнительных значений и значений по умолчанию

Рассмотрим пример.

product/{category}/{name=all}/{id?}

Здесь: {category} — обязательный параметр, {name} имеет значение по умолчанию — all, а {id} — необязательный параметр.
Рассмотрим возможные URL-адреса, соответствующие этому шаблону и соответствующие значения маршрута.

URL-адрес Значения маршрута
/product/shoes/formal/3 category=shoes, name=formal, id=3
/product/shoes/formal category=shoes, name=formal
/product/shoes category=shoes, name=all
/product/bags/satchels category=bags, name=satchels
/product/phones category=phones, name=all
/product/computers/laptops/ABC-123 category=computers, name=laptops, id=ABC-123

Важно!

Значение необязательного параметра можно указывать только в конце шаблона.

Добавление дополнительных ограничений к параметрам маршрута

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

Ограничение Пример Примеры совпадений Описание
int {qty:int} 123, -123, 0 Соответствует любому целому числу
guid {id:guid} 37b0b5c5-694c-4add-837d-92711d98fd60 Соответствует любому Guid
decimal {cost:decimal} 29.99, 52, -1.01 Соответствует любому десятичному числу
min(value) {age:min(18)} 18, 20 Соответствует целым значениям от 18 и выше
length(value) {name:length(6)} andrew, 123456 Соответствует строкам длиной 6 символов
optional int {qty:int?} 123, -123, 0, null Cоответствует любому целому числу или отсутствует
optional int max(value) {qty:int:max(10)?} 3, -123, 0, null Соответствует любому целому меньше 10 или отсутствует

Если при сопоставлении URL-адреса с шаблоном какие-либо из указанных условий не выполняются — шаблон не считается совпадающим.

Сопоставление произвольных URL-адресов с помощью универсального параметра

Для ситуации, когда мы не знаем заранее, сколько сегментов должно быть в адресе, либо, когда в параметре должен присутствовать разделитель /, необходимо использовать универсальный параметр, который объявляется при помощи одной или двух звёздочек внутри параметра, то есть {*others} или {**others}. Такой параметр можно использовать только в конце шаблона, так как он захватит все сегменты до конца. Разница между одной и двумя звездочками — в поведении при генерации URL-адреса: адрес с одной звездочкой кодирует косую черту, с двумя — нет.1


Последнее обновление : 16 апреля 2023 г.
Дата создания : 22 сентября 2022 г.

Комментарии

Комментарии