默认和自定义路由引用同一控制器时,MVC路由不起作用

时间:2012-05-09 10:49:15

标签: asp.net-mvc-routing

我的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”时,第二个路由器应该被执行但有些如何不执行。 我已经读过路由器的序列很重要,因此我尝试在那里交换序列,但它仍然无法正常工作,如果我将它置于默认路由器之上,则cutom路由器会被调用该路由器中的所有其他操作,不应该发生

3 个答案:

答案 0 :(得分:0)

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

http://localhost/Test/1001

http://localhost/Test/1001/State

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

此外,不需要controller = "Test", action = "Action12",因为它们不属于第二个路线定义

看看这个MSDN link on ASP.NET routing

答案 1 :(得分:0)

最后一个网址组件State=TX看起来像是一个查询字符串参数。不应该是?State=TX(然后与您的路线不匹配)或/State/TX

答案 2 :(得分: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部分需要为数字才能执行。

相关问题