Razor Pages 应用程序中是否有一种方法可以将默认起始路线更改为某个区域?

Is there a way in a Razor Pages app to change the default starting route to an Area?

当您使用个人帐户创建 ASP.Net 核心 Web 应用程序时,它会添加一个身份区域以及常规页面文件夹。 因为我不想在 Pages 文件夹和 Area 文件夹之间工作,所以我想创建一个主区域,我的应用程序的默认路由“/”将路由到该主区域。 通过将此添加到 Program.cs:

,我能够为索引页面完成此操作
builder.Services.AddRazorPages(options =>
{
    options.Conventions.AddAreaPageRoute("Home", "/Index", "");
});

显然,这只处理单个索引页面,但如果我想要一个关于或隐私页面,我也必须为它们添加 AreaPageRoutes。我用 AddAreaFolderRouteModelConvention 尝试了几个不同的东西,我很尴尬,不能在这里展示,但最终无法找到如何让它工作。

将页面的默认路由映射到特定区域是否可能,其次,这是不好的做法吗?

您可以对区域中的页面使用 PageRouteModelConvention to change the attribute route

public class CustomPageRouteModelConvention : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        foreach (var selector in model.Selectors.ToList())
        {
            selector.AttributeRouteModel.Template = selector.AttributeRouteModel.Template.Replace("Home/", "");
        }
    }
}

一般来说,关于 Razor 页面应用程序中的区域,我的建议是不要使用它们。它们增加了额外的复杂性而根本没有真正的好处。你一引入自己的领域,就已经发现自己在和框架作斗争。 QED.

区域唯一真正发挥作用的地方是 Razor class 图书馆,因此在使用身份 UI 时,您必须使用区域。但您不必使用身份 UI。您可以从中获取代码灵感,并在您现有的 Pages 文件夹中实现您自己的版本。