Изменение целевой страницы по умолчанию на странице ASP.NET Core Razor?

Я старался:

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

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

AmbiguousMatchException: The request matched multiple endpoints. Matches:

Page: /Index

Page: /NewIndex

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

РЕДАКТИРОВАТЬ

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

Читайте ответ по следующей ссылке stackoverflow.com/questions/49035516/…

SUNIL DHAPPADHULE 28.05.2019 12:30

Возможный дубликат Как изменить начальную страницу с помощью Razor Pages в .NET Core 2?

Brad Patton 30.05.2019 03:10

Посмотрите ответ @sixto-saez, связанный Брэдом stackoverflow.com/a/55361078/5754. Я проверил его, и он работает.

adinas 30.05.2019 15:38

@adinas делает именно то, что делает AddRazorPagesOptions , просто сокращенная версия, и мне нужно изменить имя страницы индекса.

mshwf 02.06.2019 16:06

Вам не нужно менять имя индексной страницы. Просто дайте ему другую директиву страницы. Например, на первой строке главной страницы поставьте @page "/old".

adinas 02.06.2019 21:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
1 211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Страницы по умолчанию в Razor Pages — это страницы, для которых создан пустой строковый шаблон маршрута. Вы можете использовать пользовательский PageRouteModelConvention, чтобы удалить пустой строковый шаблон маршрута, созданный для страницы Индекс.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

Другие вопросы по теме