Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET路由和正则表达式_Asp.net_Routing - Fatal编程技术网

ASP.NET路由和正则表达式

ASP.NET路由和正则表达式,asp.net,routing,Asp.net,Routing,我正在尝试启用如下所示的路由 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(r

我正在尝试启用如下所示的路由

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是“-”,我们匹配第一条路线,否则匹配第二条路线。

我对正则表达式的实现不是100%肯定,但我认为它应该是这样的:

route.Constraints.Add("c1", "([^-]*)");
route.Constraints.Add("c2", "([^-]*)");

我对正则表达式的实现不是百分之百的肯定,但我认为它应该是这样的:

route.Constraints.Add("c1", "([^-]*)");
route.Constraints.Add("c2", "([^-]*)");

如果我理解正确,那么您确实想匹配
“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
如果我理解正确,您可能需要稍微改变URL的组织方式想要匹配
“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

是的,由于正则表达式的解析方式,似乎不可能使用单个路由创建规则。我用两条路由解决了这个问题。是的,由于正则表达式的解析方式,似乎不可能用一条路由创建规则。我通过两条路线解决了这个问题。