我在Global.asax.cs
routes.MapRoute(
"Custom",
"party/get/{a}~{b}",
new { controller = "party", action = "get" },
new { a = @"\d+", b = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Party", action = "Index", id = UrlParameter.Optional }
);
如果请求为http://localhost:58684/party/get/37~12
,那么它将与第一条路线匹配,a
和b
的值分别为37
和12
。
如果请求为http://localhost:58684/party/get/37~-12
,则第一条路由不匹配此请求,因为-12
与约束@"\d+"
不匹配,并且默认路由与请求匹配(我不想要这种行为)。
如果某个请求由于某些限制而未被一条路由匹配,我该如何避免匹配该请求的其他后续路由?我没有兴趣为以下路线设置任何约束。
答案 0 :(得分:0)
你可以使用routes.IgnoreRoute。
一个例子:
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
答案 1 :(得分:0)
你不能告诉路由引擎“忽略一条路线,如果它匹配这条路线的一部分而不是全部路线”。但是,您可以添加另一条路线来捕获错误请求并对其执行其他操作 - 显示错误页面或重定向到其他操作。
如果您在所需路线后直接添加,则应捕获不需要的请求。
routes.MapRoute(
"BadPartyValue",
"party/get/{badValue}",
new { controller = "party", action = "BadValue" }
);