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

如何为ASP.NET Razor Pages的URL添加.html后缀?

给ASP.NET Razor Pages页面添加.html后缀路由

你之前的代码问题出在AddPageRoute的用法上——这个方法是给单个页面指定自定义路由,参数顺序是「页面路径」在前,「路由模板」在后,而且不能用通配符来全局配置。下面是两种可行的实现方式:

方法一:全局给所有页面添加.html后缀(保留原无后缀路由)

修改Program.cs中的配置,通过路由约定批量修改所有页面的路由模板:

builder.Services.AddRazorPages().AddRazorPagesOptions(opt =>
{
    // 遍历所有页面的路由规则,添加.html后缀
    opt.Conventions.AddFolderRouteModelConvention("/", model =>
    {
        foreach (var selector in model.Selectors)
        {
            var originalTemplate = selector.AttributeRouteModel.Template;
            // 跳过根页面(单独处理)
            if (!string.IsNullOrEmpty(originalTemplate))
            {
                selector.AttributeRouteModel.Template = $"{originalTemplate}.html";
            }
        }
    });

    // 单独配置根页面的.html路由(localhost/index.html → Pages/Index.cshtml)
    opt.Conventions.AddPageRoute("/Index", "index.html");
});
  • AddFolderRouteModelConvention("/", ...) 会作用于Pages文件夹下的所有页面,把每个页面原有的路由模板(比如Login)修改为Login.html。
  • 根页面(Index.cshtml)默认路由是空字符串,所以需要单独用AddPageRoute指定index.html的路由规则。
  • 这种方式下,原无后缀路由(比如localhost/login)依然可以访问。

方法二:仅保留带.html的路由(禁用无后缀访问)

如果不想让用户通过无后缀URL访问页面,可以修改代码移除原路由规则,只保留带.html的版本:

builder.Services.AddRazorPages().AddRazorPagesOptions(opt =>
{
    opt.Conventions.AddFolderRouteModelConvention("/", model =>
    {
        // 先保存原有的路由选择器,再清空列表
        var originalSelectors = model.Selectors.ToList();
        model.Selectors.Clear();

        foreach (var selector in originalSelectors)
        {
            var originalTemplate = selector.AttributeRouteModel.Template;
            if (!string.IsNullOrEmpty(originalTemplate))
            {
                // 创建新的路由选择器,添加.html后缀
                var newSelector = new SelectorModel(selector)
                {
                    AttributeRouteModel = new AttributeRouteModel
                    {
                        Template = $"{originalTemplate}.html"
                    }
                };
                model.Selectors.Add(newSelector);
            }
        }
    });

    // 根页面仅保留index.html路由
    opt.Conventions.AddPageRoute("/Index", "index.html");
    // 移除根页面的默认空路由(可选,若要禁用localhost直接访问根页面)
    opt.Conventions.RemovePageRoute("/Index", "");
});
  • 这里先保存原路由选择器,清空后只添加带.html后缀的新规则,原无后缀路由就会失效。
  • 最后一行代码可以移除根页面的默认空路由,强制用户通过index.html访问首页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:10:21