Освоение ограничений маршрутов в .NET Core 2.1: полное руководство

В этой статье блога мы погрузимся в мир ограничений маршрутов в.NET Core 2.1. Ограничения маршрутов позволяют определять правила сопоставления и ограничения маршрутов в веб-приложении ASP.NET Core. Используя эти ограничения, вы можете добавить гибкости и контроля в свою систему маршрутизации и гарантировать, что правильные маршруты сопоставляются с учетом конкретных условий. Итак, давайте рассмотрим некоторые методы и примеры использования возможностей ограничений маршрутов!

  1. Основное ограничение маршрута: числовые значения

    routes.MapRoute(
       name: "Product",
       template: "product/{id:int}",
       defaults: new { controller = "Product", action = "Details" }
    );

    В этом примере ограничение маршрута {id:int}запрещает параметру idпринимать только целочисленные значения. Таким образом, маршрут /product/123будет соответствовать, а /product/abc— нет.

  2. Ограничение длины строки

    routes.MapRoute(
       name: "Search",
       template: "search/{query:minlength(3)}",
       defaults: new { controller = "Search", action = "Results" }
    );

    Здесь ограничение маршрута {query:minlength(3)}гарантирует, что параметр queryдолжен иметь минимальную длину 3 символа. Таким образом, маршрут /search/abcбудет соответствовать, а /search/ab— нет.

  3. Ограничение регулярного выражения

    routes.MapRoute(
       name: "Category",
       template: "category/{name:regex(^\\w{{3,8}}$)}",
       defaults: new { controller = "Category", action = "Details" }
    );

    В этом примере ограничение маршрута {name:regex(^\\w{{3,8}}$)}использует регулярное выражение для сопоставления параметра nameс шаблоном. Здесь шаблон указывает, что nameдолжно состоять из 3–8 символов слова. Таким образом, /category/booksбудет соответствовать, а /category/abcdefg— нет.

  4. Пользовательское ограничение маршрута

    public class CustomConstraint : IRouteConstraint
    {
       public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
       {
           // Custom constraint logic goes here
       }
    }
    
    routes.MapRoute(
       name: "Custom",
       template: "custom/{value:custom}",
       defaults: new { controller = "Custom", action = "Details" },
       constraints: new { value = new CustomConstraint() }
    );

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

Ограничения маршрутов в.NET Core 2.1 предоставляют мощный способ контроля и проверки маршрутов в веб-приложении ASP.NET Core. Используя числовые ограничения, длину строки, ограничения регулярных выражений или даже создавая собственные ограничения, вы можете гарантировать, что маршруты точно сопоставляются с учетом конкретных условий. Понимание и использование ограничений маршрутов повысит гибкость и надежность вашей системы маршрутизации.