Как создать URL-адреса страниц Razor в коде C #?

Microsoft представила Razor Pages в ASP.NET Core 2.0 в качестве альтернативы MVC. Мы планируем перенести наше устаревшее приложение ASP.NET MVC 5 на NET Core, и Microsoft рекомендует в дальнейшем использовать Razor Pages вместо MVC.

В настоящее время мы используем структуру T4MVC для создания строго типизированных объектов ActionResult для создания сложных меню навигации. Навигационное меню создается с использованием модели просмотра, которая представляет собой связанный список маршрутов ActionResult, где каждый маршрут может быть чем-то довольно сложным, например:

https://example.com/Client/1/Documents/2/Edit?p1=123&p2=ABC&h2=456

В T4MVC я могу добавить это действие контроллера в свою модель просмотра с помощью:

menu.Add(MVC.Client.Documents.Edit(cliendId, documentId, requestParameters));

Документация по ASP не содержит подробных сведений о том, как создавать маршруты в коде, кроме простого: RedirectToPageResult ("./ Index"), так как же создать более сложные маршруты страниц без использования T4MVC или использования волшебных строк?


person Neil Dobson    schedule 02.10.2018    source источник
comment
Microsoft рекомендует использовать Razor Pages вместо MVC. Это кажется странным. Я рассматриваю Razor Pages как облегченную версию MVC, основанную на MVC. Это не замена.   -  person Patrick Hofman    schedule 02.10.2018
comment
См. docs.microsoft. com / en-us / aspnet / core / tutorials / first-mvc-app /, в частности. Является предпочтительным подходом для разработки новых приложений.   -  person Neil Dobson    schedule 02.10.2018
comment
Разве это не покрывается docs.microsoft.com/aspnet/core/ учебные руководства / razor-pages / поиск как в: не требуется дополнительная проводка?   -  person Corak    schedule 02.10.2018
comment
Страницы документации охватывают довольно простые сценарии, в которых все маршруты являются относительными, а параметры запроса или обработчик / действие могут быть установлены в представлении. Наше приложение намного сложнее. Это мультитенантная, многоцелевая система CMS, и каждая страница может иметь несколько навигационных меню и других контекстных меню. Маршруты передаются через параметры контекста, позволяя пользователям переключаться в разные области приложения и возвращаться снова. Мы генерируем навигационные меню с помощью построителей, которые берут контекстный объект и генерируют меню. Так что прямо сейчас это координируется контроллером, а не представлением.   -  person Neil Dobson    schedule 02.10.2018
comment
MS, похоже, подразумевает, что любой тип приложения может быть создан с помощью Razor Pages. Мы думаем, что нет, но мы готовы попробовать. Обсуждение здесь github.com/aspnet/Docs/issues/6146   -  person Neil Dobson    schedule 02.10.2018


Ответы (1)


Вы можете легко закодировать URL-адрес, если знаете имя пути к странице razor относительно папки Pages (это по умолчанию). Например:

 public IActionResult OnPostGoogle(string provider)
        {

            var redirectUrl = "https://localhost:5001/UserPages/ExternalLoginCallback";
            var properties = signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
            return new ChallengeResult(provider, properties);
        }

Это метод, который настраивает вход в Google и перенаправляет пользователя на страницу ExternalLoginCallback. Здесь у меня есть ExternalLoginCallback.cshtml.cs, который находится в Pages / UserPages. Таким образом, вы можете добавить относительный путь к своей странице из PagesFolder к адресу вашего веб-сайта или, в моем случае, localhost, и вы получите полный URL-адрес своей страницы. Вот почему они использовали в примере RedirectToPageResult (./ Index), потому что Index.cshtml.cs находится прямо в папке Pages.

person Zivojin Milutinovic    schedule 01.10.2020