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(); }
теперь главная страница доступна по маршрутам:
- /
- /Home
- /Home/Index
- /Home/Index/[xxxx], где [xxxx] — любое целое число
Множественные маршруты
При использовании маршрутизации на основе атрибутов мы можем указывать для одного и того же действия несколько маршрутов, например:
[Route("/hello")] [Route("/main")] [Route("/{controller=Home}/{action=Index}/{id:int}")] public IActionResult Index() { return View(); }
теперь главная страница доступна по маршрутам:
- /
- /hello
- /main
Итого
Маршрутизация на основе атрибутов позволяет разрабатывать более гибкую систему маршрутизации в приложениях ASP.NET Core MVC. Для указания маршрута по которому будет выполняться действие используется атрибут Route
в параметрах которого передается шаблон маршрута.