ASP.NET Core 2:如何使用区域 RedirectToPage?

Posted

技术标签:

【中文标题】ASP.NET Core 2:如何使用区域 RedirectToPage?【英文标题】:ASP.NET Core 2: how to RedirectToPage with area? 【发布时间】:2019-02-06 00:35:00 【问题描述】:

RedirectToPage("Companies") 将重定向到 /Pages/Companies.cshtml(来自 ASP.NET MVC 控制器)

但是如果想重定向到这个页面/Areas/MyArea/Pages/Companies.cshtml呢?

所有这些和许多其他都不起作用:

RedirectToPage("/MyArea/Companies.cshtml") 
RedirectToPage("MyArea/Companies.cshtml") 
RedirectToPage("./MyArea/Companies.cshtml") 
RedirectToPage("/MyArea/Companies") 
RedirectToPage("MyArea/Companies") 
RedirectToPage("./MyArea/Companies") 

有时我会收到“找不到页面”错误。有时会得到“指定带有前导 '/' 的根相对路径以在 Razor 页面之外生成 URL”。没有Pages 文件夹。我知道这一切都会再次改变所有规则。

附: Razor 页面配置为普通 .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);没有添加特定的路由。

【问题讨论】:

【参考方案1】:

使用overload of RedirectToPage that takes an object representing RouteValues:

return RedirectToPage("/Companies", new  area = "MyArea" );

请注意,如果您在控制器(或 Razor 页面之外的任何位置)中使用 RedirectToPage,则需要 '/'。否则它不是必需的(但仍然可以工作)。

【讨论】:

这很奇怪,但这也不起作用。我应该向 AddRazorPagesOptions 添加一些路由吗? 我的项目文件夹中没有Pages文件夹。 我也有标准的身份区域。 RedirectToPage("Account/AccessDenied", new area = "Identity" );也不行。出现同样的错误:指定带有前导“/”的根相对路径以在 Razor 页面之外生成 URL。 有趣。它对我来说很好,没有前导“/”,有和没有 Pages 文件夹。我怀疑不同之处在于您在 MVC 控制器中工作,而我的测试来自 Razor Page 处理程序方法。 是的 - 错误信息很清楚。如果您在 Razor 页面之外(例如在 MVC 控制器中)使用 RedirectToPage,则需要正斜杠。我会相应地更新我的答案。【参考方案2】:

这对我有用:

return RedirectToPage("/Companies", new area = "MyArea" );

在普通.SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 下工作,没有配置特定的路由。

我觉得这将是一个受欢迎的问题...感谢 Mike Bring,他为我指明了一条道路。

附:如果您有 Pages 文件夹 - 所有规则都将再次更改。这就是“Razor Pages”试图摆脱“MVC 魔法”的方式

【讨论】:

以上是关于ASP.NET Core 2:如何使用区域 RedirectToPage?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 中设置默认区域?

如何在 Asp.Net Core 的控制器操作和区域中限制参数类型

使用 Azure 地理冗余 (RA-GRS) 表存储时,如何更新 ASP.NET Core 中的 TableServiceClient 以指向次要区域?

缩短asp.net core 5 Razor页面中区域的路径

ASP.NET Core 属性路由 - 区域设置前缀

为啥 ASP.NET-Core 应用程序会收到错误消息“此平台不支持锁定/解锁文件区域”。在 MacOS 上部署时?