Маршрутизация в ASP.NET Core MVC. Маршрутизация на основе атрибутов

ASP NET Core MVC позволяет использовать в приложении маршрутизацию на основе атрибутов (Attribute-Based Routing). Атрибуты предоставляют более гибкий способ определения маршрутов и часто используются при разработке различных REST API.

Маршрутизация на основе атрибутов

Чтобы использовать маршрутизацию на основе атрибутов, необходимо в методе Main() вызвать метод MapControllers(). Создадим новое приложение ASP.NET Core MVC и перепишем метод Main() следующим образом:

public static void Main(string[] args)
{
    var builder = WebApplication.CreateBuilder(args);

    builder.Services.AddControllersWithViews();

    var app = builder.Build();

    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.MapControllers(); //подключаем маршрутизацию на основе атрибутов
    
    app.Run();
}

Теперь для маршрутизации мы должны использовать для действий контроллера специальный атрибут Route.

Атрибут Route

Атрибут Route устанавливает маршрут(-ы) по которым будет выполняться действие контроллера. В параметрах атрибута передается шаблон маршрута. Например, используем этот атрибут в действиях контроллера HomeController:

[Route("")]
public IActionResult Index()
{
    return View();
}

[Route("/privacy")]
public IActionResult Privacy()
{
    return View();
}

Теперь главная страница приложения будет открываться по умолчанию после запуска приложения, а страница Privacy — по пути /privacy:

Шаблон маршрута

Как и в случае с маршрутизацией на основе соглашений, мы можем создавать шаблоны маршрутов и указывать их в параметре атрибута Route

[Route("/{controller=Home}/{action=Index}")]
public IActionResult Index()
{
    return View();
}

теперь главная страница приложения будет доступна по следующим маршрутам:

  • /
  • /Home
  • /Home/Index

Как и в базовом ASP.NET Core, мы можем указывать в шаблоне маршрута ограничения:

[Route("/{controller=Home}/{action=Index}/{id:int}")]
public IActionResult Index()
{
    return View();
}

теперь главная страница доступна по маршрутам:

Список доступных ограничений для параметров маршрута можно посмотреть здесь

Множественные маршруты

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

[Route("/hello")]
[Route("/main")]
[Route("/{controller=Home}/{action=Index}/{id:int}")]
public IActionResult Index()
{
    return View();
}

теперь главная страница доступна по маршрутам:

  • /
  • /hello
  • /main

Итого

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

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