.net 7 Страницы Razor с несколькими соглашениями о маршрутах не работают
У меня есть старое веб-приложение .net4.8, которое использует MVC и контроллеры и пытается преобразовать (переписать) его в страницы бритвы .net 7.
Я пытаюсь изменить старую маршрутизацию URL-адресов, чтобы она стала стандартной.
Маршрутизация моей страницы Razor работает нормально и выглядит следующим образом.
@page "/flights/{FromIata:length(3)?}/{ToIata:length(3)?}"
я тоже пробовал
@page "/flights/{FromIata?}/{ToIata?}"
в моем program.cs я добавил другие соглашения о маршрутах.
builder.Services.AddRazorPages()
.AddRazorPagesOptions(ops => { ops.Conventions.Insert(0, new RouteTemplateModelConventionRazorPages()); })
.AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/Flights", "/flights/from-{FromIata:length(3)}-to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights", "/flights/{FromIata:length(3)}-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights", "/flights/{FromIata:length(3)}-to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights", "/flights/from-{FromIata:length(3)}-{FromCity}-to-{ToIata:length(3)}-{ToCity}");
options.Conventions.AddPageRoute("/Flights", "/flights/to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights", "/flights/to-{ToIata:length(3)}-{CityName}");
options.Conventions.AddPageRoute("/Flights", "/flights/{*url}");
})
если я перехожу на страницу со стандартной конвекцией, она работает нормально, но если я использую какие-либо другие соглашения, я получаю ошибку 404.
То, что я пытаюсь сделать, это либо загрузить страницу с другим соглашением. т.е. /Flights/to-kul-kuala%20lumpur или, если я использую это соглашение, он выполняет постоянное перенаправление на новый формат URL-адреса. т.е. рейсов/кул
Любые предложения будут ценны.
Заранее спасибо.
2 ответа
Шаблон маршрута, который вы предоставили@page
директива начинается с косой черты. Это делает его переопределяющим маршрутом , который сводит на нет все остальные. Если вы хотите добавить другие шаблоны маршрутов, удалите косую черту в начале:
@page "flights/{FromIata:length(3)?}/{ToIata:length(3)?}"
решения были такими же, как указано выше, чтобы удалить /
@page "flights/{FromIata:length(3)?}/{ToIata:length(3)?}"
и добавьте индекс к соглашению.
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/Flights/from-{FromIata:length(3)}-to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/Flights/{FromIata:length(3)}-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/Flights/{FromIata:length(3)}-to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/Flights/from-{FromIata:length(3)}-{FromCity}-to-{ToIata:length(3)}-{ToCity}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/Flights/to-{ToIata:length(3)}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/flights/to-{ToIata:length(3)}-{CityName}");
options.Conventions.AddPageRoute("/Flights/Index", "{Culture}/flights/{*url}");