В параметре default
http://localhost:5001), тогда механизм маршрутизации вызовет метод действия Index класса HomeController без параметра id. Параметру default присуща поступательность, т.е. он допускает исключение справа налево. Однако пропускать части маршрута не разрешено. Ввод URL вида http://localhost:5001/Delete/5 не пройдет сопоставление с шаблоном {controller}/{action}/{id}.Механизм маршрутизации попытается отыскать первый маршрут на основе контроллера, действия, специальных маркеров и метода HTTP. Если механизм маршрутизации не может определить наилучший маршрут, тогда он сгенерирует исключение AmbiguousMatchException
Обратите внимание, что шаблон маршрута не содержит протокол или имя хоста. Механизм маршрутизации автоматически добавляет в начало корректную информацию при создании маршрута и применяет метод HTTP, путь и параметры для определения соответствующей конечной точки приложения. Например, если ваш сайт запускается на https://www.skimedic.com
www.skimedic.com) автоматически добавляются к маршруту при его создании (скажем, https://www.skimedic.com/Car/Delete/5). Для входящего запроса механизм маршрутизации использует порцию Car/Delete/5 из URL.Именованные маршруты
Имена маршрутов могут применяться в качестве сокращения для генерации URL изнутри приложения. Выше конечной точке было назначено имя default
Маршрутизация с помощью атрибутов
При маршрутизации с помощью атрибутов маршруты определяются с использованием атрибутов C# в отношении контроллеров и их методов действий. Это может привести к более точной маршрутизации, но также увеличит объем конфигурации, поскольку для каждого контроллера и действия необходимо указать информацию маршрутизации.
Например, взгляните на приведенный ниже фрагмент кода. Четыре атрибута Route
Index эквивалентны маршруту, который был определен ранее. Метод действия Index является конечной точкой приложения для mysite.com, mysite.com/Home, mysite.com/Home/Index или mysite.com/Home/Index/5.public class HomeController : Controller
{
[Route("/")]
[Route("/Home")]
[Route("/Home/Index")]
[Route("/Home/Index/{id?}")]
public IActionResult Index(int? id)
{
...
}
}
Основное различие между маршрутизацией на основе соглашений и маршрутизацией с помощью атрибутов заключается в том, что первая охватывает приложение, тогда как вторая — контроллер с атрибутом Route
public class CarController : Controller
{
public IActionResult Delete(int id)
{
...
}
}
На заметку!
Маршрутизацию на основе соглашений и маршрутизацию с помощью атрибутов можно использовать вместе. Если бы в методеUseEndpoints был настроен стандартный маршрут контроллера (как в примере с маршрутизацией на основе соглашений), то предыдущий контроллер попал бы в таблицу маршрутов.Когда маршруты добавляются на уровне контроллера, методы действий получают этот базовый маршрут. Например, следующий маршрут контроллера Delete
[Route("[controller]/[action]/{id?}")]
public class CarController : Controller
{
public IActionResult Delete(int id)
{
...
}
}
На заметку!
При маршрутизации с помощью атрибутов встроенные маркеры помечаются квадратными скобками ([]), а не фигурными ({}), как при маршрутизации на основе соглашений. Для специальных маркеров применяются все те же фигурные скобки.Если методу действия необходимо перезапустить шаблон маршрута, тогда нужно предварить маршрут символом прямой косой черты (/
Delete должен следовать шаблону URL вида mysite.eom/Delete/Car/5, то вот как понадобится сконфигурировать действие:[Route("[controller]/[action]/{id?}")]
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT