Читаем Язык программирования C#9 и платформа .NET5 полностью

Конечные точки маршрутизации состоят из шаблонов URL, включающих в себя переменные-заполнители (называемые маркерами) и литералы, которые помещены в упорядоченную коллекцию, известную как таблица маршрутов. Каждая запись в ней определяет отличающийся шаблон URL, предназначенный для сопоставления. Заполнители могут быть специальными переменными или браться из заранее определенного списка. Зарезервированные маркеры маршрутов перечислены в табл. 29.6.

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

<p id="AutBody_Root1343"><strong>Маршрутизация и REST-службы ASP.NET Core</strong></p>

При определении маршрутов для служб ASP.NET метод действия не указывается. Вместо этого, как только контроллер обнаруживается, выполняемый метод действия базируется на методе HTTP запроса и назначениях методов HTTP методам действий. Детали будут приведены чуть позже.

<p id="AutBody_Root1344"><strong>Маршрутизация на основе соглашений</strong></p>

При маршрутизации на основе соглашений (или традиционной маршрутизации) таблица маршрутов строится в методе UseEndpoints() класса Startup. Метод MapControllerRoute() добавляет конечную точку в таблицу маршрутов, указывая имя, шаблон URL и любые стандартные значения для переменных в шаблоне URL. В приведенном ниже примере кода заранее определенные заполнители {controller} и {action} ссылаются на контроллер и метод действия, содержащийся в данном контроллере. Заполнитель {id} является специальным и транслируется в параметр (по имени id) для метода действия. Добавление к маркеру маршрута знака вопроса указывает на его необязательность.

app.UseEndpoints(endpoints =>

{

  endpoints.MapControllerRoute(

    name: "default",

    template: "{controller=Home}/{action=Index}/{id?}");

});

Запрашиваемый URL проверяется на соответствие с таблицей маршрутов. При наличии совпадения выполняется код, находящийся в этой конечной точке приложения. Примером URL, который мог бы обслуживаться таким маршрутом, является Car/Delete/5. В результате вызывается метод действия Delete() класса контроллера CarController с передачей значения 5 в параметре id.

В параметре default указано, каким образом заполнять пустые фрагменты в URL, которые содержат не все определенные компоненты. С учетом предыдущего кода, если в URL ничего не задано (например, http://localhost:5001), тогда механизм маршрутизации вызовет метод действия Index() класса HomeController без параметра id. Параметру default присуща поступательность, т.е. он допускает исключение справа налево. Однако пропускать части маршрута не разрешено. Ввод URL вида http://localhost:5001/Delete/5 не пройдет сопоставление с шаблоном {controller}/{action}/{id}.

Механизм маршрутизации попытается отыскать первый маршрут на основе контроллера, действия, специальных маркеров и метода HTTP. Если механизм маршрутизации не может определить наилучший маршрут, тогда он сгенерирует исключение AmbiguousMatchException.

Обратите внимание, что шаблон маршрута не содержит протокол или имя хоста. Механизм маршрутизации автоматически добавляет в начало корректную информацию при создании маршрута и применяет метод HTTP, путь и параметры для определения соответствующей конечной точки приложения. Например, если ваш сайт запускается на https://www.skimedic.com, то протокол (HTTPS) и имя хоста (www.skimedic.com) автоматически добавляются к  маршруту при его создании (скажем, https://www.skimedic.com/Car/Delete/5). Для входящего запроса механизм маршрутизации использует порцию Car/Delete/5 из URL.

<p id="AutBody_Root1345"><strong>Именованные маршруты</strong></p>

Имена маршрутов могут применяться в качестве сокращения для генерации URL изнутри приложения. Выше конечной точке было назначено имя default.

<p id="AutBody_Root1346"><strong>Маршрутизация с помощью атрибутов</strong></p>

При маршрутизации с помощью атрибутов маршруты определяются с использованием атрибутов C# в отношении контроллеров и их методов действий. Это может привести к более точной маршрутизации, но также увеличит объем конфигурации, поскольку для каждого контроллера и действия необходимо указать информацию маршрутизации.

Например, взгляните на приведенный ниже фрагмент кода. Четыре атрибута Route на методе действия Index() эквивалентны маршруту, который был определен ранее. Метод действия Index() является конечной точкой приложения для mysite.com, mysite.com/Home, mysite.com/Home/Index или mysite.com/Home/Index/5.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных