Изменить целевую страницу по умолчанию на странице ASP.NET Core Razor? - PullRequest
0 голосов
/ 28 мая 2019

Я пытался:

services.AddMvc().AddRazorPagesOptions(options =>
{
    options.Conventions.AddPageRoute("/Index", "old");
    options.Conventions.AddPageRoute("/NewIndex", "");
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

Это исключение выдается:

AmbiguousMatchException: запрос соответствует нескольким конечным точкам. Матчи:

Страница: / Индекс

Страница: / NewIndex

Я обнаружил этот , который предлагает переименовать страницу индекса, но, очевидно, если не веская причина, представленная, это обходной путь. Разве я не могу просто изменить страницу по умолчанию, не переименовав страницу / Index?

EDIT

Предлагаемые потоки SO не охватывают проблему, которую я объяснил, которая переопределяет маршрут по умолчанию без необходимости переименовывать страницу по умолчанию Index. Принятый ответ решил проблему.

1 Ответ

2 голосов
/ 30 мая 2019

Страницы по умолчанию в Razor Pages - это страницы, для которых создан пустой шаблон строки.Вы можете использовать пользовательский PageRouteModelConvention, чтобы удалить шаблон маршрута пустой строки, сгенерированный для страницы Index.cshtml , и вместо этого добавить его на любую страницу, которую вы хотите использовать в качестве страницы по умолчанию:

public class HomePageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        if(model.RelativePath == "/Pages/Index.cshtml")
        {
            var currentHomePage = model.Selectors.Single(s => s.AttributeRouteModel.Template == string.Empty);
            model.Selectors.Remove(currentHomePage);
        }

        if (model.RelativePath == "/Pages/NewIndex.cshtml")
        {
            model.Selectors.Add(new SelectorModel()
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Template = string.Empty
                }
            });
        }
    }
}

Вы регистрируете соглашение в ConfigureServices:

services.AddMvc().AddRazorPagesOptions(options =>
{
    options.Conventions.Add(new HomePageRouteModelConvention());
}).SetCompatibilityVersion(CompatibilityVersion.Latest);

Подробнее о соглашениях модели пользовательских страниц можно узнать здесь: https://www.learnrazorpages.com/advanced/custom-route-conventions

...