.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}");
Другие вопросы по тегам