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

如何在Razor Pages中覆盖默认路由,隐藏Area默认URL并自定义?

解决ASP.NET Core Area路由替换问题

我明白你想把Administration Area的默认路由完全替换成toothbrush,同时禁用原来的~/Administration相关URL,之前的尝试要么需要重复配置,要么生成了不符合预期的路由。这里给你一个精准的解决方案:

核心思路

我们需要通过路由约定全局替换整个Area的路由前缀,把原来的{area}变量(对应Administration)替换成固定的toothbrush,同时确保原来的路由模板被完全覆盖,无法再通过原URL访问。

具体实现代码

在Program.cs(或Startup.cs的ConfigureServices方法)中,配置Razor Pages路由时添加以下约定:

builder.Services.AddRazorPages(options =>
{
    // 全局修改Administration Area的根路由约定
    options.Conventions.AddAreaRouteModelConvention("Administration", routeModel =>
    {
        foreach (var selector in routeModel.Selectors)
        {
            // 将路由模板中的{area}占位符替换为固定值"toothbrush"
            selector.AttributeRouteModel.Template = selector.AttributeRouteModel.Template.Replace("{area}", "toothbrush");
        }
    });

    // 处理Area内子文件夹的路由约定(如果有子页面的话)
    options.Conventions.AddAreaFolderRouteModelConvention("Administration", "/", folderRouteModel =>
    {
        foreach (var selector in folderRouteModel.Selectors)
        {
            selector.AttributeRouteModel.Template = selector.AttributeRouteModel.Template.Replace("{area}", "toothbrush");
        }
    });
});

为什么这个方案有效?

  1. 全局覆盖,无需重复配置:通过AddAreaRouteModelConvention和AddAreaFolderRouteModelConvention,一次性修改整个Area下所有页面的路由模板,不用给每个页面单独设置。
  2. 完全隐藏原URL:替换掉路由模板中的{area}变量后,原来的~/Administration/xxx路由会失效(返回404),只能通过~/toothbrush/xxx访问。
  3. 生成正确的URL:当你使用Url.Page等方法生成Area内页面的URL时,会自动生成toothbrush前缀的路径,符合预期。

验证效果

  • 访问~/toothbrush/Index(或Area内其他页面的对应路径):正常打开页面。
  • 访问原来的~/Administration/Index:返回404,确保原路由被隐藏。

内容的提问来源于stack exchange,提问作者user9152964

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:48