忽略具有路径约束的请求

时间:2012-10-17 16:10:51

标签: 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}/{action}/{id}",
        new { controller = "Party", action = "Index", id = UrlParameter.Optional }
);

如果请求为http://localhost:58684/party/get/37~12,那么它将与第一条路线匹配,ab的值分别为3712

如果请求为http://localhost:58684/party/get/37~-12,则第一条路由不匹配此请求,因为-12与约束@"\d+"不匹配,并且默认路由与请求匹配(我不想要这种行为)。

如果某个请求由于某些限制而未被一条路由匹配,我该如何避免匹配该请求的其他后续路由?我没有兴趣为以下路线设置任何约束。

2 个答案:

答案 0 :(得分:0)

你可以使用routes.IgnoreRoute。

一个例子:

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });

答案 1 :(得分:0)

你不能告诉路由引擎“忽略一条路线,如果它匹配这条路线的一部分而不是全部路线”。但是,您可以添加另一条路线来捕获错误请求并对其执行其他操作 - 显示错误页面或重定向到其他操作。

如果您在所需路线后直接添加,则应捕获不需要的请求。

routes.MapRoute(
    "BadPartyValue",
    "party/get/{badValue}",          
    new { controller = "party", action = "BadValue" }
);