Asp. net Постоянное значение маршрута доступа к Core Razor Pages - PullRequest
0 голосов
/ 09 мая 2020

На веб-сайте Asp. net Core 3.x Razor Pages мне нужно установить несколько предопределенных постоянных имен маршрутов, указывающих на одну страницу, а затем получить к ним доступ на конкретной модели cs html .cs PageModel.

options.Conventions.AddPageRoute("/propertylist", "/properties/category1");
options.Conventions.AddPageRoute("/propertylist", "/properties/category2");
options.Conventions.AddPageRoute("/propertylist", "/properties/category3");
// I don't want any other categories to reach to the propertylist page so I didn't set it as '/properties/{categoryName}'

И затем внутри PropertyList.cs html .cs мне нужно знать, какая категория использовалась в качестве данных маршрута

public async Task OnGet()
{
     // Get the route data to find the category name
}

1 Ответ

0 голосов
/ 09 мая 2020

Я придумал это решение. Сначала я создал ограничение маршрута.

public class PropertyListRouteConstraint : IRouteConstraint
    {
        private string[] categories = new[] {
            Constants.Routes.Categories.Category1,
            Constants.Routes.Categories.Category2,
            Constants.Routes.Categories.Category3
        };
        public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
        {
            return categories.Contains(values[routeKey]);
        }
    }

Затем в Startup.cs я удалил предыдущие имена маршрутов и добавил это

services.Configure<RouteOptions>(options =>
{
     options.ConstraintMap.Add("allowedpropertycats", typeof(PropertyListRouteConstraint));
});

в PropertyList.cs html

@page "/properties/{categoryname:allowedpropertycats}"

В PropertyList.cs html .cs

public class PropertyListModel : PageModel
    {        
        [BindProperty(SupportsGet = true)]
        public string CategoryName { get; set; }

        public async Task OnGet()
        {
           ...
        }
    }

Таким образом, CategoryName содержит значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...