Маршрутизация в ASP.NET Core MVC. Введение

В ASP.NET Core MVC для того, чтобы связать действия контроллера с запросами пользователя используется маршрутизация. Система маршрутизации ASP.NET Core MVC базируется на система маршрутизации, используемой в ASP.NET Core, расширяя её возможности для применения в контроллерах.

Стандартный маршрут в ASP.NET Core MVC

С системой маршрутизации ASP.NET Core MVC мы познакомились ещё при создании своего первого приложения ASP.NET Core MVC. Если посмотреть на код метода Main(), то мы увидим там следующий вызов метода MapControllerRoute():

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

здесь задан шаблон маршрута для сопоставления действий контроллеров и их действий с запросами пользователя, который можно условно назвать стандартным для ASP.NET Core MVC. Для изучивших систему маршрутизации в ASP.NET Core здесь, в принципе, нет никаких сложных вещей:

Такой тип маршрутизации еще называют Convention-Based Routing, то есть маршрутизация, основанная на условностях в определениях маршрутов. В приложении ASP.NET Core MVC мы можем определять любое количество маршрутов в зависимости от наших потребностей.

Добавление нового маршрута

Для добавления новых маршрутов в ASP.NET Core MVC могут использоваться несколько методов. Рассмотрим их.

MapControllerRoute()

public static ControllerActionEndpointConventionBuilder MapControllerRoute(
    this IEndpointRouteBuilder endpoints,
    string name,
    [StringSyntax("Route")] string pattern,
    object? defaults = null,
    object? constraints = null,
    object? dataTokens = null)
{

определяет произвольный маршрут и принимает следующие параметры:

  • name — название маршрута (произвольная строка)
  • pattern — шаблон маршрута
  • defaults — значения по умолчанию для маршрута
  • constraintsограничения маршрута
  • dataTokens — токены маршрута.

Например, мы можем изменить вызов MapControllerRoute() в методе Main() следующим образом:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action}/{id?}",
    defaults: new { controller="Home", action="Index"});

при этом ничего не изменится — параметры маршрута controller и action также будут содержать значения по умолчанию.

MapDefaultControllerRoute()

Определяет стандартный маршрут. Вызов этого метода эквивалентен вызову:

app.MapControllerRoute( 
name: "default", 
pattern: "{controller=Home}/{action=Index}/{id?}");

MapAreaControllerRoute()

Определяет маршрут, который также учитывает область приложения.

public static ControllerActionEndpointConventionBuilder MapAreaControllerRoute(
       this IEndpointRouteBuilder endpoints,
       string name,
       string areaName,
       [StringSyntax("Route")] string pattern,
       object? defaults = null,
       object? constraints = null,
       object? dataTokens = null)

Про области ещё будет тема. Пока же можно сказать, что этот метод аналогичен методу MapControllerRoute() за исключением того, что у этого метода имеется ещё обязательный параметр — areaName — имя области для которой применяется маршрут.

MapControllers()

Сопоставляет действия контроллера с запросами, используя маршрутизацию на основе атрибутов. Про систему маршрутизации на основе атрибутов также будет отдельная тема.

MapFallbackToController()

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

public static IEndpointConventionBuilder MapFallbackToController(
     this IEndpointRouteBuilder endpoints,
     string action,
     string controller)
  • action — действие контроллера
  • controller — имя контроллера, которому будет передан запрос

Получение параметров маршрутов в контроллере

Для получения параметров маршрута в контроллере используется свойство контроллера RouteData. Например, создадим новое приложение ASP.NET Core MVC и изменим метод Index() контроллера HomeController следующим образом:

public IActionResult Index()
{
    return Ok(RouteData);
}

после запуска приложения мы увидим следующий вывод:

Итого

Система маршрутизации ASP.NET Core MVC базируется на маршрутизации ASP.NET Core, но добавляет в эту систему свои дополнительные моменты. Например, методы для сопоставления входящих запросов с контроллерами и их действиями.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии