You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Razor Pages,将子文件夹默认页改为子文件夹名+Page后缀文件

解决方案

要在Razor Pages中替换默认的Index.cshtml为子文件夹名称加Page后缀的文件(如SettingsPage.cshtml),需要通过配置Razor Pages约定来实现,避免手动设置路由导致的冲突。以下是具体步骤:

1. 移除手动路由设置

首先删除SettingsPage.cshtml等文件中的@page "/"配置,这类手动路由会与根目录的默认页路由冲突,引发AmbiguousMatchException。

2. 配置Razor Pages约定

在项目的Program.cs(.NET 6+)或Startup.cs(.NET 5及更早)中,通过AddRazorPages的选项配置自定义路由约定:

方式一:针对单个子文件夹配置

如果子文件夹数量不多,可以逐个设置:

builder.Services.AddRazorPages(options =>
{
    // 配置Settings文件夹的默认页为SettingsPage.cshtml,路由为/Settings
    options.Conventions.AddFolderRouteModelConvention("/Settings", model =>
    {
        foreach (var selector in model.Selectors)
        {
            selector.AttributeRouteModel.Template = "Settings";
        }
        options.Conventions.AddPageRoute("/Settings/SettingsPage", "Settings");
    });

    // 配置Users文件夹的默认页为UsersPage.cshtml,路由为/Users
    options.Conventions.AddFolderRouteModelConvention("/Users", model =>
    {
        foreach (var selector in model.Selectors)
        {
            selector.AttributeRouteModel.Template = "Users";
        }
        options.Conventions.AddPageRoute("/Users/UsersPage", "Users");
    });
});

方式二:通用自动配置(适合多子文件夹)

如果有大量子文件夹,可以通过遍历Pages目录自动生成约定,避免重复代码:

builder.Services.AddRazorPages(options =>
{
    var pagesDir = new DirectoryInfo(Path.Combine(builder.Environment.ContentRootPath, "Pages"));
    foreach (var folder in pagesDir.GetDirectories())
    {
        var folderName = folder.Name;
        var pageName = $"{folderName}Page";
        var pagePath = $"/{folderName}/{pageName}";

        // 设置文件夹路由模板为文件夹名称
        options.Conventions.AddFolderRouteModelConvention($"/{folderName}", model =>
        {
            foreach (var selector in model.Selectors)
            {
                selector.AttributeRouteModel.Template = folderName;
            }
        });

        // 将[FolderName]Page.cshtml绑定为该文件夹的默认页
        options.Conventions.AddPageRoute(pagePath, folderName);
    }
});

3. 验证效果

完成配置后:

  • 访问/Settings会自动指向/Pages/Settings/SettingsPage.cshtml
  • 访问/Users会自动指向/Pages/Users/UsersPage.cshtml
  • 根目录的Index.cshtml仍对应/路由,不会产生冲突

内容的提问来源于stack exchange,提问作者Stig Schmidt Nielsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:05:38