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

时间:2015-02-02 16:41:57

标签: regex asp.net-web-api attributerouting

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

我在控制器上有hello属性来处理RoutePrefix,所以我尝试使用

映射操作
api/v2/i8n

但随后在配置时抛出错误,指出[Route(@"{cultureString:regex(^\w{2}(?:-\w{2})?$)")] 是一个错误的路由值。我尝试将{cultureString:regex(^\w{2替换为\w{2},同时删除\w\w并转义我的反斜杠,但后来提交了

  

路由模板不能以'/'或'〜'字符开头,也不能包含'?'字符。

如果我甚至无法使用@,我怎样才能创建带有可选部分的正则表达式?

1 个答案:

答案 0 :(得分:1)

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

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

以上含义是它匹配两个\w后跟另外两个\w或字符串结尾$