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

Razor Pages为App页面添加路由参数后出现404错误的求助

解决Razor页面添加路由参数后404的问题

嘿,你遇到的问题根源是混淆了Razor页面和MVC控制器的路由机制——你用了MVC控制器专属的[HttpGet]特性来定义路由,但Razor页面有自己的路由规则,根本不识别这个特性,所以才会返回404。下面给你两种靠谱的解决办法:

方法一:直接修改页面的@page指令(推荐)

Razor页面的路由核心是顶部的@page指令,我们可以直接在这个指令里添加路由参数模板,步骤如下:

  1. 打开你的app.cshtml文件,把顶部默认的@page改成带参数的模板:

    @page "{name}"
    @model YourProjectName.Pages.appModel
    

    如果你想同时保留无参数的访问(比如http://myapp.com/app也能打开页面),可以把参数设为可选:

    @page "{name?}"
    
  2. 在对应的app.cshtml.cs页面模型中,保留接收参数的OnGet方法,删掉没用的[HttpGet]特性:

    public class appModel : PageModel
    {
        // 如果是可选参数,要给默认值
        public void OnGet(string name = null)
        {
            // 在这里使用name参数处理业务逻辑
            if (!string.IsNullOrEmpty(name))
            {
                Console.WriteLine($"当前访问的名称:{name}");
            }
        }
    }
    

这样修改后,访问http://myapp.com/app/greg就能正常匹配到页面,并且name参数会被正确传递到OnGet方法中。

方法二:全局配置路由约定

如果你不想修改单个页面的@page指令,可以在项目的Program.cs里全局配置Razor页面的路由规则:

var builder = WebApplication.CreateBuilder(args);

// 添加Razor页面服务并配置路由约定
builder.Services.AddRazorPages(options =>
{
    // 给/app页面添加带参数的路由
    options.Conventions.AddPageRoute("/app", "app/{name}");
    // 如果要支持无参数访问,改成:
    // options.Conventions.AddPageRoute("/app", "app/{name?}");
});

var app = builder.Build();

// 中间件配置...
app.MapRazorPages();

app.Run();

同样,记得删掉页面模型里的[HttpGet]特性,OnGet方法保持接收name参数即可。

关键注意点

  • 一定要删除[HttpGet("app/{name}")]这个特性,Razor页面不识别它,反而会干扰路由匹配
  • 路由模板里的占位符名称(比如{name})必须和OnGet方法的参数名完全一致
  • 如果需要支持无参数访问,要把路由模板里的参数加上?,同时给方法参数设置默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:42