我正在尝试启用类似以下的路线
route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new ResultRouteHandler());
route.Constraints = new RouteValueDictionary();
route.Constraints.Add("c1", "(.*)|([-])");
route.Constraints.Add("c2", "(.*)|([-])");
RouteTable.Routes.Add(route);
然而,当c1或c2为“ - ”时,我遇到了问题。例如,“a-b-c,d --- f”返回404(而“a-b-c,d-e-f”工作正常)。任何人都知道我做错了什么?提前谢谢。
修改
我找到了解决此问题的简单方法:
route = new Route("{w1}-{c1}-{n1},{w2}---{n2}", new MyRouteHandler());
RouteTable.Routes.Add(route);
route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new MyRouteHandler());
RouteTable.Routes.Add(route);
如果c2是“ - ”,我们匹配第一条路线,否则匹配第二条路线。
答案 0 :(得分:1)
如果我理解正确,你做想要匹配"a-b-c,d---f"
,这就是你首先调整约束的原因。你在那里的正则表达式有点多余,但'-'
将匹配'.*'
。换句话说,我不认为你的正则表达式是责任,而是路由引擎解析器。
如果您将路线从"{w1}-{c1}-{n1},{w2}-{c2}-{n2}"
更改为"{w1}-{c1}-{n1},{w2}_{c2}-{n2}"
,则c2将开始与'-'
中的"a-b-c,d_--f"
匹配。我认为解析路由的一些方法并不像使用分隔符作为下一个值。
因此,我认为您可以删除约束(因为它们目前存在),但如果您希望'-'
为c1
或c2
,则可能需要稍微改变一下您的网址的组织方式
答案 1 :(得分:0)
我对正则表达式实现并不是100%肯定,但我认为它应该是这样的:
route.Constraints.Add("c1", "([^-]*)");
route.Constraints.Add("c2", "([^-]*)");