Ответ
В ASP.NET Core маршрутизация настраивается двумя основными способами: атрибутной (рекомендуется для API) и конвенциональной маршрутизацией.
1. Атрибутная маршрутизация (Attribute Routing)
Наиболее гибкий и явный способ. Маршруты задаются с помощью атрибутов [Route], [HttpGet], [HttpPost] и т.д.
[ApiController]
[Route("api/[controller]")] // Базовый маршрут для всего контроллера
public class ProductsController : ControllerBase
{
// GET api/products/5
[HttpGet("{id:int}")]
public IActionResult GetById(int id) { ... }
// POST api/products
[HttpPost]
public IActionResult Create([FromBody] Product product) { ... }
// GET api/products/category/books
[HttpGet("category/{categoryName}")]
public IActionResult GetByCategory(string categoryName) { ... }
}
Ключевые моменты:
[controller]и[action]— токены, заменяемые на имя контроллера (без суффикса "Controller") и метода.- Можно задавать ограничения для параметров прямо в шаблоне (
{id:int}). - Позволяет создавать иерархические, RESTful-пути.
2. Конвенциональная маршрутизация (Conventional Routing)
Задается глобально в конфигурации приложения (обычно в Program.cs).
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
name: "blog",
pattern: "blog/{*slug}",
defaults: new { controller = "Blog", action = "ReadPost" });
Когда использовать:
- Для приложений с традиционной структурой MVC (страницы, а не API).
- Когда нужен единый шаблон маршрутов для многих контроллеров.
Best Practice: Для веб-API предпочтительнее атрибутная маршрутизация, так как она делает пути явными и упрощает поддержку.