0

我的 global.asax 中有两个路由器,一个是默认路由器,如下所示:

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", 
                new { controller = "Test", action = "Action1", id = UrlParameter.Optional } 
            );

另一个是自定义路由器:

routes.MapRoute(
        "CustomRouter", // Route name
        "Test/{id}/{FacetString}/{CurrPageNo}", 
        new { controller = "Test", action = "Action12", id = "", FacetString = UrlParameter.Optional, CurrPageNo=UrlParameter.Optional }           

);

一些当我通过 url "http://localhost/Test/1001/State=TX" 时,第二个路由器应该被执行,但有些它没有执行。我已经读过路由器的顺序很重要,因此我尝试在那里交换顺序,但它仍然不起作用,如果我将它放在默认路由器之上,那么该路由器中的所有其他操作都会调用自定义路由器,这不应该发生

4

3 回答 3

0

似乎您应该使用约束,降低自定义路由器的匹配率。您可以使用第四个参数来定义您的约束。在这种情况下,它可能是这样的

    routes.MapRoute(
    "CustomRouter", // Route name
    "Test/{id}/{FacetString}/{CurrPageNo}", 
    new { controller = "Test", action = "Action12", id = "", FacetString =    UrlParameter.Optional, CurrPageNo=UrlParameter.Optional
 , new {id=@"\d+"});

这样,您的第二个 URL 部分必须是数字才能执行。

于 2012-05-09T11:18:16.910 回答
0

根据您的第二条路线,您的网址应采用以下格式之一

http://localhost/Test/1001

http://localhost/Test/1001/State

http://localhost/Test/1001/State/3

也不需要,controller = "Test", action = "Action12"因为它们不是第二条路线定义的一部分

看看这个关于 ASP.NET 路由的 MSDN 链接

于 2012-05-09T10:51:58.480 回答
0

最后一个 URL 组件State=TX对我来说就像一个查询字符串参数。不应该是?State=TX(这与您的路线不匹配)或/State/TX

于 2012-05-09T10:53:04.803 回答