默认情况下,MVC 4应用程序在ProjectFolder\App_Start\RoutConfig.cs
中具有以下路由:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在浏览器中,对http://host:port/controller/
的任何调用都会将您带到http://host:port/controller/Index
。
现在,如果您想更改起始页,请说SomeController\MyAction
,您可以将其更改为:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "SomeController", action = "MyAction", id = UrlParameter.Optional }
);
但是http://host:port/controller/
不会显示http://host:port/controller/Index
,而是显示404错误页面。您需要在网址中明确附加/Index
。
如果您从项目属性更改启动页面并将路由保留到Home \ Index,那么除了URL根http://host:port/
将不显示启动页面外,一切都会正常工作。运行应用程序时,它会在URL中附加启动页面名称。但是,如果您的应用程序中某处有<a href="/" title="home">Home</a>
之类的相对超链接,则不会将您带到所需的主页
有没有办法配置启动页面“SomeController \ MyAction”这样; root URL始终指向它,Index
是每个控制器的默认视图吗?
相当于Ruby on Rails路线的东西:
root :to => "some_controller#my_action"
保持默认视图绑定到index
操作。
答案 0 :(得分:4)
您需要在默认路由之前为Site root添加额外路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "SiteRoot", url: "",
defaults: new { controller = "SiteRoot", action = "Main" });
routes.MapRoute(name:"Default", url:"{controller}/{action}/{id}",
defaults:new {controller = "Home", action = "Index", id = UrlParameter.Optional});
}
现在"/"
会将您带到SiteRoot/Main
,而"/Home"
会将您带到Home/Index
。
请注意,在这种情况下,"/SiteRoot"
也会转到"SiteRoot/Index"
,而不是"SiteRoot/Main"
。这可以通过特定于url: "/SiteRoot"
的其他路线轻松更改。
此外,如果您想要更精确,在默认路线中您可以删除部分controller = "Home"
,因为第一条路线现在涵盖了这种情况。但是,保留默认路线也可以。
routes.MapRoute(name:"Default", url:"{controller}/{action}/{id}",
defaults:new { action = "Index", id = UrlParameter.Optional});
答案 1 :(得分:2)
听起来你想要这个:
routes.MapRoute(
name: "SomeController Default",
url: "SomeController/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
ASP.NET Web API
的默认路由如下:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);