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

WebForms迁移至.NET Core Razor Pages:URL路由配置问题求助

解决Razor Pages绑定自定义URL的问题

针对你从WebForms迁移到.NET Core Razor Pages时遇到的自定义路由404问题,提供两种可靠的解决方案:

方法一:页面级直接配置@page指令

这是最直接的方式,和你尝试的思路一致,但要注意几个关键细节:

  • @page必须是文件第一行:确保.cshtml文件的第一行就是@page "/routeurl"或@page "/routeurl/routewithsubname",前面不能有空格、注释或其他内容
  • 路由模板无需额外引号:正确写法是@page "/routeurl",不要在路由字符串外层加多余的引号(你之前代码里的引号是复制时的转义问题,实际编写时去掉即可)
  • 页面位置不影响路由:不管你的.cshtml在Pages目录的哪个子文件夹(比如Pages/SitePage/SubDirectory/PageName.cshtml),@page指定的路由都会直接映射到该页面,和目录结构完全解耦

示例(PageName.cshtml第一行):

@page "/routeurl"
@model YourNamespace.Pages.SitePage.SubDirectory.PageNameModel
<!-- 页面内容 -->

方法二:全局路由配置(类似WebForms的MapPageRoute)

如果你习惯集中管理路由,可以在Program.cs(.NET 6+)中通过Razor Pages约定配置全局路由映射,完全对应原来WebForms的写法:

var builder = WebApplication.CreateBuilder(args);

// 添加Razor Pages服务并配置路由约定
builder.Services.AddRazorPages(options =>
{
    // 映射"routeurl"到指定页面
    options.Conventions.AddPageRoute("/SitePage/SubDirectory/PageName", "routeurl");
    // 映射"routeurl/routewithsubname"到指定页面
    options.Conventions.AddPageRoute("/SitePage/SubDirectory/PageName2", "routeurl/routewithsubname");
});

var app = builder.Build();

// 中间件配置,确保顺序正确
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

// 启用Razor Pages路由
app.MapRazorPages();

app.Run();

404错误排查要点

如果还是出现404,检查以下几点:

  • 确认app.MapRazorPages();中间件已添加,且位于app.UseRouting()和app.UseAuthorization()之后
  • 检查路由模板的拼写(比如大小写、斜杠是否正确)
  • 确保页面的.cshtml文件存在,且对应的.cshtml.cs模型类没有编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:39:39