Url.Action()不会删除默认值

时间:2017-09-26 13:32:59

标签: c# asp.net-mvc asp.net-mvc-routing

我有一个简单的路由映射。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}/{seoName}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, seoName = UrlParameter.Optional }
);

现在,如果使用Url.Action("Index", "Home"),则无法正确删除路由的默认值。它给了我/Home/Index

现在,如果删除{id}{seoName}及其相应的默认值,则会正确生成网址,如/(root)。

我在这里缺少什么?它似乎不是环境值,因为我访问的主页没有id,也没有seoNames。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要多个映射才能达到您想要的效果,因为您只能将最后一个路径占位符设为可选项。

routes.MapRoute(
    name: "SeoFriendly",
    url: "{controller}/{action}/{id}/{seoName}",
    defaults: new { controller = "Home", action = "Index", seoName = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);