我有一个简单的路由映射。
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。
有什么想法吗?
答案 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 }
);