我看过几个类似的帖子,但没有一个是完全相同的,因为在我的问题中,我想从URL中删除HOME控制器,但控制器仍然是默认值(所以当我的网站从site.com加载时/我的家庭控制器中的索引被触发了!! !!
我的MVC4网站有几个控制器,例如
主页
产品
详细
AndAnother
YetAnother
Home控制器是我的默认控制器,是我的主页所在的位置,关于页面,联系我们等等
我想从URL中删除HOME,但这仍然是我的默认控制器。所有其他控制器应保留控制器名称。
以下不起作用,请注意默认控制器“WhatControllerGoesHere”
routes.MapRoute(
name: "HomeController",
url: "{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "WhatControllerGoesHere", action = "Index", id = UrlParameter.Optional }
);
如果我同时设置默认控制器HOME,则无法导航到任何其他控制器
routes.MapRoute(
name: "HomeController",
url: "{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
所以,我想要实现的网址是(在哪里和我们联系是我家中的观点)
site.com/ //note, no Home/
site.com/about //note, no Home/
site.com/contact //note, no Home/
site.com/products/
site.com/products/other
site.com/details/
site.com/details/other
site.com/details/AndAnother
我知道我可以为每个控制器创建新的路由器但是如果可能的话我宁愿避免使用它。
答案 0 :(得分:3)
除了site.com/about
和site.com/contact
之外,您显示的所有网址都将由默认路由正确处理。要从Home/
和about
网址中删除contact
前缀,您需要在默认值之前添加2条特定路由(假设您不需要id
参数)
routes.MapRoute(
name: "About",
url: "About",
defaults: new { controller = "Home", action = "About" }
);
routes.MapRoute(
name: "Contact",
url: "Contact",
defaults: new { controller = "Home", action = "Contact" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);