You need to enable JavaScript to run this app. 能否在带默认值的路由段上使用带正则约束的RouteAttribute?
优惠活动
大模型
产品
解决方案
定价
更多

能否在带默认值的路由段上使用带正则约束的RouteAttribute?

路由匹配需求实现方案

可以通过RouteAttribute实现该需求,你原有代码不生效的核心原因是未将lang路由段标记为可选:当前定义的lang属于必选路由段,默认值=ru仅在路由段存在但未传值的场景生效,直接省略整个lang段时路由模板长度不匹配,自然无法命中。

推荐方案:双路由属性写法(无匹配歧义)

直接声明两个路由模板,分别覆盖带合法lang参数、省略lang参数的场景,即使后续出现和lang取值同名的Controller也不会出现匹配错乱:

// 匹配带合法lang参数的请求:如 api/ru/home/index
[Route("api/{lang:regex(^(ru|cs|en)$)}/{controller}/{action}")]
// 匹配省略lang的请求:如 api/home/index,默认lang为ru
[Route("api/{controller}/{action}")]
public IActionResult Index(string lang = "ru")
{
    return View();
}

如果需要整个Controller下的所有Action都复用该规则,把两个Route属性贴到Controller类上即可。

简化方案:单路由模板写法

如果你的项目中不存在名为ru、cs、en的Controller,也可以用单路由模板实现,通过?标记lang段为可选:

[Route("api/{lang:regex(^(ru|cs|en)$)?=ru}/{controller}/{action}")]
public IActionResult Index(string lang)
{
    return View();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 03:24:04