Asp.net mvc 忽略具有路由约束的请求
我在Asp.net mvc 忽略具有路由约束的请求,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我在Global.asax.cs routes.MapRoute( "Custom", "party/get/{a}~{b}", new { controller = "party", action = "get" }, new { a = @"\d+", b = @"\d+" } ); routes.MapRoute( "Default", "{controller}/{act
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+”
不匹配,并且默认路由与请求匹配(我不希望此行为)
如果由于某些限制,一个请求没有与一个路由匹配,我如何避免与该请求匹配的其他后续路由?我不想为以下路由设置任何约束。您可以使用routes.IgnoreRoute
一个例子:
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
您不能告诉路由引擎“如果某个路由与此路由的一部分匹配,而不是全部匹配,则忽略该路由”。但是,您可以添加另一个路由来捕获错误请求,并对其执行其他操作—显示错误页面或重定向到其他操作
如果您直接在所需的路由之后添加此选项,它将捕获不需要的请求
routes.MapRoute(
"BadPartyValue",
"party/get/{badValue}",
new { controller = "party", action = "BadValue" }
);