Я старался:
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
.
Принятый ответ решил проблему.
Возможный дубликат Как изменить начальную страницу с помощью Razor Pages в .NET Core 2?
Посмотрите ответ @sixto-saez, связанный Брэдом stackoverflow.com/a/55361078/5754. Я проверил его, и он работает.
@adinas делает именно то, что делает AddRazorPagesOptions
, просто сокращенная версия, и мне нужно изменить имя страницы индекса.
Вам не нужно менять имя индексной страницы. Просто дайте ему другую директиву страницы. Например, на первой строке главной страницы поставьте @page "/old"
.
Страницы по умолчанию в 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
Читайте ответ по следующей ссылке stackoverflow.com/questions/49035516/…