0

我在中定义了几条路线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匹配。3712

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

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

4

2 回答 2

0

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

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

routes.MapRoute(
    "BadPartyValue",
    "party/get/{badValue}",          
    new { controller = "party", action = "BadValue" }
);
于 2012-10-17T20:57:58.130 回答
0

你可以使用 routes.IgnoreRoute。

一个例子:

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
于 2012-10-17T17:11:56.987 回答