C# ASP.net MVC 4路由和可选参数意外结果
这是我的路线,唯一需要的参数是控制器C# ASP.net MVC 4路由和可选参数意外结果,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,这是我的路线,唯一需要的参数是控制器 routes.MapRoute( "countryoptional/controller", "{country}/{controller}/{pagelabel}/{page}", new { action = "index", country = UrlParameter.Optional, pagelabel = UrlParameter.Optional, pa
routes.MapRoute(
"countryoptional/controller",
"{country}/{controller}/{pagelabel}/{page}",
new { action = "index", country = UrlParameter.Optional, pagelabel = UrlParameter.Optional, page = UrlParameter.Optional },
new
{
pays = @"$|^(france|belgium)$",
controller = @"^(car|boat)$",
pagelabel = @"^$|page",
page = @"^$|\d{1,6}"
}
);
我希望使用以下URL:
/汽车/
/汽车/第页/2
/法国/汽车
/法国/汽车/第页/2
这类工作:
Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2} )
将生产:/france/car/page/2
但是
如果我想要一个不带国家/地区的url,那么视图操作会响应,但会有一个类似的构造函数
Url.Action("index", "car", new { pagelabel = "page", page = 2} )
将生成以下链接://car/page/2
我得到了这辆双斜杠//车,所以它当然会断开连接
我怀疑它不喜欢{country}/{controller}/.中{country}参数前面的controller可选的可能性。。。url定义
我不想使我的路由配置复杂化,并有另一个路由声明
一定有办法,我做错了什么?可选参数必须跟在任何必需的参数后面。据我所知,这是无法避免的。同样的限制也适用于方法定义等的其他地方
只需重复这条路线,一条有所需国家/地区,另一条没有任何国家/地区。MVC将确定使用哪一个。可选参数必须遵循任何必需的参数。据我所知,这是无法避免的。同样的限制也适用于方法定义等的其他地方
只需重复这条路线,一条有所需国家/地区,另一条没有任何国家/地区。MVC将决定使用哪一个。在您的可选参数中,您使用的是付费,而不是国家/地区。我不确定这是否有什么不同。我对regex不太在行,但我相信你添加了一个约束条件,以确保该国不是法国就是比利时。因此,当您不提供它时,它不会设置国家的值。在可选参数中,您使用的是pays而不是country。我不确定这是否有什么不同。我对regex不太在行,但我相信你添加了一个约束条件,以确保该国不是法国就是比利时。因此,当您不提供它时,它不会设置国家/地区的值。可选参数必须遵循任何必需的参数。我不知道这个规则,我想回答这个问题,选择参数必须遵循任何必需的参数。我不知道这条规则,我想这可以回答问题,谢谢