Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

Маршрутизация и REST-службы ASP.NET Core

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

Маршрутизация на основе соглашений

При маршрутизации на основе соглашений (или традиционной маршрутизации) таблица маршрутов строится в методе 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.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Именованные маршруты

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

Маршрутизация с помощью атрибутов

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

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

public class HomeController : Controller

{

<b>  [Route(&quot;/&quot;)]</b>

<b>  [Route(&quot;/Home&quot;)]</b>

<b>  [Route(&quot;/Home/Index&quot;)]</b>

<b>  [Route(&quot;/Home/Index/{id?}&quot;)]</b>

  public IActionResult Index(int? id)

  {

    ...

  }

}

Основное различие между маршрутизацией на основе соглашений и маршрутизацией с помощью атрибутов заключается в том, что первая охватывает приложение, тогда как вторая — контроллер с атрибутом Route. Если маршрутизация на основе соглашений не применяется, то каждому контроллеру понадобится определить свой маршрут, иначе доступ к нему будет невозможен. Скажем, если в таблице маршрутов не определен стандартный маршрут, тогда следующий код обнаружить не удастся, т.к. маршрутизация для контроллера не сконфигурирована:

public class CarController : Controller

{

  public IActionResult Delete(int id)

  {

    ...

  }

}

На заметку! Маршрутизацию на основе соглашений и маршрутизацию с помощью атрибутов можно использовать вместе. Если бы в методе UseEndpoints() был настроен стандартный маршрут контроллера (как в примере с маршрутизацией на основе соглашений), то предыдущий контроллер попал бы в таблицу маршрутов.

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*