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 в параметрах которого передается шаблон маршрута.
