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

ASP.NET Core Razor Pages路由404:多路由匹配配置求助

解决ASP.NET Core Razor Pages多路由匹配问题

你的问题在于原有的@page指令和AddPageRoute配置无法覆盖所有期望的路由场景:/blog/{category?}/page/{pageNo?}这个模板强制要求URL包含/page/段,哪怕参数可选,也无法匹配缺少该段的/blog或/blog/aspnet。同时AddPageRoute的使用方式不对,它是为页面添加备用路由,而非覆盖或补充所有需要的路由规则。

正确配置方式

你需要给Blog页面添加多个路由约定,覆盖四个目标路由场景,同时确保页面模型能正确接收可选参数。

步骤1:调整Blog.cshtml的@page指令

将Blog.cshtml顶部的@page指令改为基础路由,作为默认匹配:

@page "/blog"
@model BlogModel

步骤2:在Program.cs中添加额外路由约定

通过AddPageRoute为页面添加另外三个路由模板,覆盖剩余场景:

builder.Services.AddRazorPages().AddRazorPagesOptions(options =>
{
    // 匹配 /blog/{category}(仅指定分类,无页码)
    options.Conventions.AddPageRoute("/Blog", "blog/{category}");
    // 匹配 /blog/page/{pageNo}(仅指定页码,无分类)
    options.Conventions.AddPageRoute("/Blog", "blog/page/{pageNo}");
    // 匹配 /blog/{category}/page/{pageNo}(同时指定分类和页码)
    options.Conventions.AddPageRoute("/Blog", "blog/{category}/page/{pageNo}");
});

步骤3:确保页面模型接收可选参数

在Blog.cshtml.cs中定义对应的可选参数,用于接收路由传递的值:

public class BlogModel : PageModel
{
    public string? Category { get; set; }
    public int? PageNo { get; set; }

    public void OnGet(string? category = null, int? pageNo = null)
    {
        Category = category;
        PageNo = pageNo;
    }
}

验证效果

配置完成后,四个目标路由都会正确匹配到Blog页面:

  • /blog → category为null,pageNo为null
  • /blog/aspnet → category为aspnet,pageNo为null
  • /blog/page/1 → category为null,pageNo为1
  • /blog/aspnet/page/1 → category为aspnet,pageNo为1

内容的提问来源于stack exchange,提问作者K V Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:33