.NET Core 3.1 API迁移后路由模板报{}需转义错误如何解决
错误原因
该报错由路由正则中的量词大括号未转义触发:
- ASP.NET Core路由系统会将模板内的
{优先识别为路由参数的起始标记,你第3、4条路由正则中的{3,30}属于正则量词,没有做转义的情况下会被路由系统判定为未闭合的路由参数占位符,直接抛出对应错误。 - 你之前将正则的
[]改为双层[[]]的操作是正确的,因为路由系统中[]是可选路由段的标记,需要双层转义避免被路由系统提前解析。 - 旧版ASP.NET API的路由解析对正则内部特殊字符的容错性更高,不会主动识别正则内部的
{}作为路由参数标记,因此原有配置可以正常运行。
解决方案
将第3、4条路由正则中的{3,30}的大括号转义为{{3,30}}即可,修改后的路由配置如下:
- 第3条路由:
[Route(@"employee/{samId:regex(^[[A-Za-z0-9._-]]{{3,30}}$)}")] - 第4条路由:
[Route(@"homepage/{samId:regex(^[[a-zA-Z0-9_.-]]{{3,30}}$)}")]
转义后路由系统会先把{{、}}还原为单个大括号再传递给正则验证逻辑,不会影响原有正则的匹配规则。
内容的提问来源于stack exchange,提问作者joym8
相关产品推荐
相关产品推荐

