ASP.NET Core 3: как удалить область из маршрутизации (из URL) для одной конкретной области? - PullRequest
0 голосов
/ 18 октября 2019

Как удалить область из маршрутизации (из URL) для одной конкретной области?

Один из вариантов - настроить AddRazorPages следующим образом (работает):

serviceCollection.AddRazorPages(
                options =>
                {
                    options.Conventions.AddAreaPageRoute("MyArea", "/MyPage1", "MyPage1");
                    options.Conventions.AddAreaPageRoute("MyArea", "/MyPage2", "MyPage2");
                    // ...                    
                });

Но сделатьу нас есть возможность сделать это, не просматривая все страницы?

Что-то вроде:

serviceCollection.AddRazorPages(
                options =>
                {
                    options.Conventions.AddAreaPageRoute("MyArea", "/*", "*");

                    // ...                    
                });

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать PageRouteModelConvention , класс, который реализует IPageRouteModelConvention, который имеет метод Apply, в котором вы можете изменить шаблон маршрута (среди прочего):

public void Apply(PageRouteModel model)
{
    if(model.RelativePath.StartsWith("/Areas/MyArea"))
    {
        foreach(var selector in model.Selectors)
        {
            selector.AttributeRouteModel.Template = selector.AttributeRouteModel.Template.Replace("MyArea", string.Empty);
        }
    }
}

Зарегистрируйте вашу конвенцию в ConfigureServices:

options.Conventions.Add(new MyCustomPageRouteModelConvention());
...