C# 如何在C代码中创建Razor页面URL?

C# 如何在C代码中创建Razor页面URL?,c#,razor-pages,C#,Razor Pages,微软在ASP.NETCore2.0中引入了MVC的替代品。我们希望将传统的ASP.NET MVC 5应用程序迁移到NET Core,Microsoft建议继续使用Razor页面,而不是MVC 我们目前正在使用框架来帮助生成强类型的ActionResult对象,以构建复杂的导航菜单。导航菜单是使用viewmodel创建的,viewmodel是ActionResult路由的链接列表,其中每个路由可能非常复杂,例如: 在T4MVC中,我可以通过以下方式将此控制器操作添加到我的viewmodel中:

微软在ASP.NETCore2.0中引入了MVC的替代品。我们希望将传统的ASP.NET MVC 5应用程序迁移到NET Core,Microsoft建议继续使用Razor页面,而不是MVC

我们目前正在使用框架来帮助生成强类型的ActionResult对象,以构建复杂的导航菜单。导航菜单是使用viewmodel创建的,viewmodel是ActionResult路由的链接列表,其中每个路由可能非常复杂,例如:

在T4MVC中,我可以通过以下方式将此控制器操作添加到我的viewmodel中:

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

ASP文档没有详细介绍如何在代码中创建路由,只提供了一个简单的:RedirectToPageResult(“./Index”)那么,如何在不借助T4MVC或魔术字符串的情况下构建更复杂的页面路由呢?

如果您知道razor页面相对于Pages文件夹的路径名称(默认情况下),您可以轻松地对URL进行硬编码。例如:

 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.cshtml.cs直接位于Pages文件夹中。

Microsoft建议使用Razor Pages,而不是MVC,这似乎很奇怪。我认为Razor Pages是基于MVC的轻量级MVC版本。它不是替代品。请特别参阅“是新应用程序开发的首选方法”中的内容:不需要额外的连接吗?文档页面涵盖了非常简单的场景,其中路由都是相对的,并且可以在视图中设置查询参数或处理程序/操作。我们的应用程序要复杂得多。这是一个多租户、多用途的CMS系统,每个页面可以有多个导航菜单和其他上下文菜单。这些路由带有上下文参数,允许用户切换到不同的应用程序区域并再次返回。我们使用构建器生成导航菜单,构建器获取上下文对象并生成菜单。因此,现在这是由控制器协调的,而不是由视图协调的。MS似乎意味着任何类型的应用程序都可以使用Razor页面构建。我们认为不会,但我们愿意试一试。这里有一些讨论