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

Razor应用如何实现URL保留多级未知分类路径的导航路由配置?

实现方案

直接用Razor原生的通配符捕获路由就可以满足需求,不需要复杂的自定义级联参数逻辑。

1. 基础通配符路由实现

不管是Blazor组件还是Razor Pages,都支持在路由模板中加*前缀的参数,用来捕获当前位置之后的所有路径片段:
分类页Blazor组件直接编写如下路由即可匹配任意层级的分类路径:

@page "/{*CategoryPath}"

参数CategoryPath会自动拿到域名之外的完整路径字符串:

  • 访问站点根路径时,CategoryPath的值为null,刚好匹配根分类页
  • 访问/controllers/for-media-screens时,CategoryPath的值为"controllers/for-media-screens"

你只需要把拿到的字符串用Split('/')分割,过滤掉空字符串,就能得到各级分类的slug数组,上面的例子分割后就是["controllers", "for-media-screens"],拿着这个数组去数据库匹配对应分类即可。

2. 产品页路由匹配

产品页需要区分末尾的数字ID,有两种成熟方案可选:

  • 简单优先方案:给产品页也配置通配符路由,自行判断路径格式

    @page "/{*FullPath}"
    

    在组件初始化时把FullPath按/分割为片段数组,判断最后一段是否可转换为int:

    • 可转换:最后一段为产品ID,前面的所有片段为分类路径,正常渲染产品页
    • 不可转换:导航到分类页传入当前路径即可
      注意要把产品页的路由注册优先级调到比分类页高,避免被分类页先拦截。
  • 规范易维护方案:自定义路由约束
    自己实现一个路由约束,判断路径末尾片段为数字,给产品页绑定这个约束,匹配成功才会进入产品页,否则自动走分类页的路由,不需要自己做跳转判断。


3. 路径存储方案说明

你提到的把分类完整路径存数据库是中小型站点的最优选择:

  • 可以直接把拼接好的完整路径(比如"controllers/for-media-screens")作为字段存在分类表中,拿到路径后直接查表匹配,查询效率很高
  • 方便做路径合法性校验,用户输入不存在的路径时可以直接返回404
  • 后期如果要修改分类slug,也方便做301重定向,对SEO友好

如果分类层级极多、数据量级很大,也可以只存每个分类的父ID和当前层级的slug,拿到分割后的slug数组后从根分类开始逐级匹配,性能也完全够用。


内容的提问来源于stack exchange,提问作者Евгений Ляшенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:54:06