В этой записи блога мы углубимся в захватывающий мир пользовательских маршрутов в.NET 6. Маршрутизация — это фундаментальный аспект веб-разработки, позволяющий нам определять, как URL-адреса сопоставляются с конкретными действиями или конечными точками в наших приложениях. С выпуском.NET 6 появилось несколько новых методов и улучшений для создания пользовательских маршрутов. Мы рассмотрим эти методы и предоставим примеры кода, иллюстрирующие их использование.
- Маршрутизация атрибутов:
Маршрутизация атрибутов обеспечивает декларативный способ определения маршрутов с использованием атрибутов, применяемых к контроллерам и действиям. Он предлагает больше контроля и гибкости по сравнению с традиционной маршрутизацией. Вот пример:
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetProduct(int id)
{
// Retrieve product with the given ID
// ...
}
}
- Маршрутизация на основе соглашений:
Маршрутизация на основе соглашений позволяет определять маршруты на основе соглашений об именах. Это полезно, если вы хотите установить согласованный шаблон во всем приложении. Вот пример:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
- Ограничения пользовательского маршрута:
Ограничения маршрута позволяют определить собственную логику для проверки параметров маршрута. Вы можете создавать свои собственные ограничения, реализуя интерфейс IRouteConstraint. Вот пример пользовательского ограничения для числовых идентификаторов:
public class NumericIdConstraint : IRouteConstraint
{
public bool Match(
HttpContext httpContext,
IRouter route,
string routeKey,
RouteValueDictionary values,
RouteDirection routeDirection)
{
if (values.TryGetValue(routeKey, out var value) && value is string strValue)
{
return int.TryParse(strValue, out _);
}
return false;
}
}
- Значения динамического маршрута:
Вы можете создавать динамические значения маршрута, используя заполнители, заключенные в фигурные скобки. Эти значения можно получить и обработать в рамках ваших действий. Вот пример:
[HttpGet("products/{category}")]
public IActionResult GetProductsByCategory(string category)
{
// Retrieve products by category
// ...
}
- Префиксы маршрутов:
Префиксы маршрутов позволяют вам определить общий префикс для группы маршрутов в пределах определенного контроллера или области. Это может помочь организовать и сгруппировать связанные действия. Вот пример:
[Route("api/[controller]")]
[ApiController]
public class OrdersController : ControllerBase
{
[HttpGet("recent")]
public IActionResult GetRecentOrders()
{
// Retrieve recent orders
// ...
}
}
Не забывайте быть в курсе последних разработок и лучших практик в.NET 6, чтобы максимально эффективно использовать его мощные возможности маршрутизации.