我的页面应该接受两个网址,其中一个网页没有应该具有默认值"索引"和一个动作应该链接到用户给定的动作。
链接:
我想出了以下路线:
RouteTable.MapRoute("ThirdParty", "{thirdParty}/{controller}/{action}/{type}",
new { action = "Index" },
new { thirdParty = "^[a-zA-Z0-9]*$", type = @"\d+" },
new[] { @namespace });
不幸的是,这只匹配以下路线:
现在,我已将该操作设为默认值"索引"我认为它会匹配路线,但它并不是。我刚收到404。
为什么它与没有"索引"的路线不匹配?行动? 我正在使用ASP.NET MVC 4。
创建2条路线工作正常,但我很确定它应该在一条路线上工作。
RouteTable.MapRoute(name, "{thirdParty}/{controller}/{type}",
new { action = "Index"},
new { thirdParty = "^[a-zA-Z0-9]*$", type = @"\d+" },
new[] { @namespace });
RouteTable.MapRoute(name + "(2)", "{thirdParty}/{controller}/{action}/{type}",
new { action = "Index" },
new { thirdParty = "^[a-zA-Z0-9]*$", type = @"\d+"},
new[] { @namespace });
答案 0 :(得分:2)
绝不认为制作可以做任何事情的单一路线是最佳做法。如果您需要创建两条路线,那么这是最好的解决方案。
RouteTable.MapRoute(name, "{thirdParty}/{controller}/{type}",
new { action = "Index"},
new { thirdParty = "^[a-zA-Z0-9]*$", type = @"\d+" },
new[] { @namespace });
RouteTable.MapRoute(name + "(2)", "{thirdParty}/{controller}/{action}/{type}",
new { action = "Index" },
new { thirdParty = "^[a-zA-Z0-9]*$", type = @"\d+"},
new[] { @namespace });
此外,不可能在路由模式的中间放置一个可选的占位符 - 它只能作为最右边的位置。因此,使用MapRoute
的单一路线无法满足您的要求,因为{action}
后面跟着另一个占位符。