我的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路由器会被调用该路由器中的所有其他操作,不应该发生
答案 0 :(得分:0)
根据您的第二条路线,您的网址应采用以下格式之一
http://localhost/Test/1001
http://localhost/Test/1001/State
http://localhost/Test/1001/State/3
此外,不需要controller = "Test", action = "Action12"
,因为它们不属于第二个路线定义
答案 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部分需要为数字才能执行。