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不太在行,但我相信你添加了一个约束条件,以确保该国不是法国就是比利时。因此,当您不提供它时,它不会设置国家/地区的值。可选参数必须遵循任何必需的参数。我不知道这个规则,我想回答这个问题,选择参数必须遵循任何必需的参数。我不知道这条规则,我想这可以回答问题,谢谢