Изучение пользовательских маршрутов в .NET 6: подробное руководство

В этой записи блога мы углубимся в захватывающий мир пользовательских маршрутов в.NET 6. Маршрутизация — это фундаментальный аспект веб-разработки, позволяющий нам определять, как URL-адреса сопоставляются с конкретными действиями или конечными точками в наших приложениях. С выпуском.NET 6 появилось несколько новых методов и улучшений для создания пользовательских маршрутов. Мы рассмотрим эти методы и предоставим примеры кода, иллюстрирующие их использование.

  1. Маршрутизация атрибутов:

Маршрутизация атрибутов обеспечивает декларативный способ определения маршрутов с использованием атрибутов, применяемых к контроллерам и действиям. Он предлагает больше контроля и гибкости по сравнению с традиционной маршрутизацией. Вот пример:

[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        // Retrieve product with the given ID
        // ...
    }
}
  1. Маршрутизация на основе соглашений:

Маршрутизация на основе соглашений позволяет определять маршруты на основе соглашений об именах. Это полезно, если вы хотите установить согласованный шаблон во всем приложении. Вот пример:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});
  1. Ограничения пользовательского маршрута:

Ограничения маршрута позволяют определить собственную логику для проверки параметров маршрута. Вы можете создавать свои собственные ограничения, реализуя интерфейс 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;
    }
}
  1. Значения динамического маршрута:

Вы можете создавать динамические значения маршрута, используя заполнители, заключенные в фигурные скобки. Эти значения можно получить и обработать в рамках ваших действий. Вот пример:

[HttpGet("products/{category}")]
public IActionResult GetProductsByCategory(string category)
{
    // Retrieve products by category
    // ...
}
  1. Префиксы маршрутов:

Префиксы маршрутов позволяют вам определить общий префикс для группы маршрутов в пределах определенного контроллера или области. Это может помочь организовать и сгруппировать связанные действия. Вот пример:

[Route("api/[controller]")]
[ApiController]
public class OrdersController : ControllerBase
{
    [HttpGet("recent")]
    public IActionResult GetRecentOrders()
    {
        // Retrieve recent orders
        // ...
    }
}

Не забывайте быть в курсе последних разработок и лучших практик в.NET 6, чтобы максимально эффективно использовать его мощные возможности маршрутизации.