带有可选部分的 WebAPI 路由正则表达式

WebAPI route regex with optional parts

我想将 WebAPI 操作方法映射到格式为 api/v2/l8n/{cultureCode} 的网址,但为了避免与其他方法发生路由冲突,我需要将 cultureCode 参数限制为仅与正则表达式匹配的值^\w{2}(?:-\w{2})?$,即 sven-GB,但不是 hello

我在控制器上有一个 RoutePrefix 属性负责 api/v2/i8n,所以我尝试将操作映射到

[Route(@"{cultureString:regex(^\w{2}(?:-\w{2})?$)")]

但随后在配置时抛出一个错误,指出 {cultureString:regex(^\w{2 是一个错误的路由值。我尝试用 \w\w 替换 \w{2} 以及删除 @ 并转义我的反斜杠,但随后出现

The route template cannot start with a '/' or '~' character and it cannot contain a '?' character.

如果我什至不能使用 ?,我怎么能创建带有可选部分的正则表达式?

我希望管道运算符或交替运算符没有这样的限制,使用 which 和一些锚点,你可以让它工作。

[Route(@"{cultureString:regex(^\w\w(-\w{2}|)$)}")]

上面的意思是它匹配两个 \w 后跟另外两个 \w 或字符串的结尾 $