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

ASP.NET MVC多语言路由配置问题:带lang前缀路由返回404如何解决

问题根源

  • ASP.NET 路由系统是按注册顺序从上到下匹配的,匹配到符合规则的路由就会停止后续匹配
  • 你把不带语言前缀的Default路由放在了第一位,当访问/en/home/products时,系统会把路径分段直接套入{controller}/{action}/{id}的规则:
    • 把en识别为controller参数值
    • 把home识别为action参数值
    • 把products识别为id参数值
  • 你的项目里不存在名为en的控制器,自然就返回404错误

修复方案

  1. 调整两条路由的注册顺序,把带语言前缀的Default2路由放在前面
  2. 给lang参数添加正则约束,避免不带语言前缀的路径被这条路由错误匹配(比如你支持的语言是en和zh,就限制lang只能是这两个值)
  3. 调整后的路由代码如下:
routes.MapRoute(
    name: "Default2",
    url: "{lang}/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    constraints: new { lang = "en|zh" } // 替换为你实际支持的语言编码
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
  • 调整后访问/en/home/products会优先匹配第一条路由,正确识别lang=en、controller=home、action=products
  • 访问不带语言前缀的路径会走到第二条路由,自动使用默认的lang=en,符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:27:01