【问题标题】:How does one create Razor Page Urls in C# code?如何在 C# 代码中创建 Razor 页面 URL?
【发布时间】:2019-03-07 07:13:54
【问题描述】:

Microsoft 在 ASP.NET Core 2.0 中引入了 Razor Pages 作为 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 或求助于的情况下构建更复杂的页面路由魔术字符串?

【问题讨论】:

  • Microsoft 建议使用 Razor Pages 而不是 MVC 前进 这似乎很奇怪。我将 Razor Pages 视为基于 MVC 的轻量级 MVC 版本。它不是替代品。
  • 参见docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/…,“是新应用程序开发的首选方法”
  • docs.microsoft.com/aspnet/core/tutorials/razor-pages/search 不包括:不需要额外的布线吗?
  • 文档页面涵盖了非常简单的场景,其中路由都是相对的,并且可以在视图中设置查询参数或处理程序/操作。我们的应用程序要复杂得多。它是一个多租户、多用途的 CMS 系统,每个页面可以有多个导航菜单和其他上下文菜单。路由携带上下文参数,允许用户切换到不同的应用程序区域并再次返回。我们使用构建器生成导航菜单,这些构建器采用上下文对象并生成菜单。所以现在这是由控制器而不是视图来协调的。
  • MS 似乎暗示可以使用 Razor Pages 构建任何类型的应用程序。我们认为不会,但我们愿意试一试。这里有一些讨论github.com/aspnet/Docs/issues/6146

标签: c# razor-pages


【解决方案1】:

如果您知道 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 页面的方法。 在这里,我有位于 Pages/UserPages 中的 ExternalLoginCallback.cshtml.cs。 因此,您可以将页面的相对路径从 PagesFolder 附加到您的网站地址,或者在我的情况下为 localhost,您将获得页面的完整 url。这就是他们在示例 RedirectToPageResult("./Index") 中使用的原因,因为 Index.cshtml .cs 直接在 Pages 文件夹中。

【讨论】:

    猜你喜欢
    • 2020-09-03
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2019-04-06
    • 2012-11-27
    相关资源
    最近更新 更多