如何在ASP.NET MVC 4和MVC 5中设置默认控制器

109

如何设置ASP.NET MVC 4项目的默认控制器而不将其设置为HomeController?

在应用程序启动时,应如何设置默认区域?


将根目录从“/”更改为“/home”,作为主页是否可行?这个“/home”必须在客户的浏览器上可见。 - Andre Mesquita
4个回答

170

最好的方法是更改您的路由。默认路由(在您的App_Start中定义)设置/Home/Index

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);

作为默认着陆页。您可以将其更改为任何您想要的路由。

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);

14
在MVC 4中,默认路由设置在App_Start/RouteConfig.cs文件中。 - Eric Labashosky
非常正确。我目前在两个项目上工作,有时会忽略这些事情 ;) - Dave Alperovich
1
戴夫是正确的,但我想补充一点,在MVC 4中,路由不再在Global.asax中处理,而是在App_Start文件夹下的RouteConfig.cs文件中处理。 - Good Samaritan
2
当默认路由中引用的控制器位于另一个区域(即不是根目录)时,如何使其工作? - superjos
你应该能够将默认路由设置为 "AreaName/{controller}/{action}/{id}" - Dave Alperovich

32

请将以下代码放置于App_Start文件夹下的RouteConfig.cs中。

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

如果仍然无法工作,请按照以下步骤操作:

第二种方法:请按照以下简单步骤操作:

1)右键单击您的项目

2)选择属性

3)选择Web选项,然后选择特定页面(Controller / View),然后设置登录页面

这里,“Account”是我的控制器,“Login”是我的操作方法(保存在Account Controller中)

请查看附加的enter image description here截图。


16
“第二种方法”是关于调试网站项目时会发生什么的。它与“默认控制器”没有关系,即当您导航到网站着陆页时显示的页面是什么。 - Martin Liversage

27

我没有看到这个问题的答案:

当应用程序启动时,我应该如何设置默认区域?

这就是如何设置默认区域的方法:

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

1
很好的问题,为什么不把它创建成一个呢? - Stuart Dobson
2
@GusCrawford 什么是“区域”? 来自http://msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx: 为了适应大型项目,ASP.NET MVC允许您将Web应用程序分成较小的单元,称为区域。区域提供了一种将大型MVC Web应用程序分成较小的功能组的方法。区域实际上是应用程序内部的MVC结构。一个应用程序可以包含多个MVC结构(区域)。 - Amna Ali
对于其他人来说,要完成这个任务,你还需要将命名空间添加到你的“默认”路由中(否则我发现,虽然我可以得到正确的默认页面,但是在“默认”区域中的所有控制器链接都找不到任何东西),如下所示: https://dev59.com/THPYa4cB1Zd3GeqPkI7j#21711800 - monty
可以用。谢谢Amna。 - Richard
这就是我要找的@Amna Ali。 - Vishnu Vikraman Sreekala
显示剩余3条评论

4

如果您只有一个控制器,并且希望在根目录访问每个操作,可以像这样跳过控制器名称

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接