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

调整ASP.NET Core路由优先级:先匹配常规路由再用SlugRouteValueTransformer

解决ASP.NET Core路由优先级问题

问题原因

ASP.NET Core的路由匹配遵循注册顺序优先原则:越先注册的路由,越先被用来匹配请求,一旦匹配成功就会终止后续路由的评估。你当前的问题是动态路由的匹配逻辑覆盖了常规路由,大概率是因为API路由(如果有的话)注册在了动态路由之后,或是对路由匹配顺序的实际生效逻辑理解有误。

解决方案

调整路由注册顺序,将所有常规控制器路由(区域、默认控制器、API路由)放在动态路由之前注册,让动态路由作为最后兜底的选项:

修改后的代码示例

// 1. 注册admin区域路由
app.MapControllerRoute(
    name: "admin",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

// 2. 注册默认控制器路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// 3. 注册API路由(如果使用属性路由的API控制器)
app.MapControllers();

// 4. 最后注册动态路由,仅当前面路由都不匹配时生效
app.MapDynamicControllerRoute<SlugRouteValueTransformer>("/{**slug}");

补充说明

  • 如果你的API使用约定路由而非属性路由,需要在动态路由之前添加API约定路由的注册:
    app.MapControllerRoute(
        name: "api",
        pattern: "api/{controller}/{action=Index}/{id?}");
    
  • 动态路由的/{**slug}是贪婪匹配模板,会匹配所有未被前面路由覆盖的请求,因此必须放在最后注册才能实现“兜底”效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:00:13