ASP.net MVC 4路由和可选参数的意外结果

本文关键字:参数 意外 结果 net MVC 路由 ASP | 更新日期: 2023-09-27 18:06:28

这是我的路由,唯一需要的参数是控制器

        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

It kind works:

Url.Action("index", "car", new { country= "france", pagelabel = "page", page = 2} )

会产生:/法国/汽车/页面/2

,

如果我想要一个没有国家/地区的url视图动作响应,但一个构造函数,如

Url.Action("index", "car", new { pagelabel = "page", page = 2} )

将产生这个链接://汽车/页面/2

我得到了这个双斜杠"//car"所以它破坏了链接。

我怀疑它不喜欢{country}前面的{country}参数在{country}/{controller}/…url定义我不想让我的路由配置变得复杂,也不想有另一个路由声明一定有办法,我做错了什么?

ASP.net MVC 4路由和可选参数的意外结果

可选参数必须遵循任何必需参数。据我所知,没有别的办法。同样的限制也适用于其他任何地方(方法定义等)。

只是重复路线,有一个指定的国家和一个没有任何国家。MVC将决定使用哪一个