在Asp.Net MVC中设置“主页”


105

在asp.net MVC中,“首页”(即点击www.foo.com时显示的路由)设置为Home / Index。

  • 此值存储在哪里?
  • 如何更改“主页”?
  • 除了在home控制器的Index操作中使用RedirectToRoute()之外,还有什么更优雅的方法吗?

我在项目中尝试对Home / Index进行grepping,但找不到参考,在IIS中也看不到任何内容(6)。我查看了根目录中的default.aspx页面,但似乎并没有做任何事情。

谢谢

Answers:


150

看看Default.aspx/Default.aspx.cs和Global.asax.cs

您可以设置默认路由:

        routes.MapRoute(
            "Default", // Route name
            "",        // URL with parameters
            new { controller = "Home", action = "Index"}  // Parameter defaults
        );

只需将Controller / Action名称更改为所需的默认值即可。那应该是路由表中的最后一条路由。


6
@NikolaiDante,您应该将该评论作为答案,因为我差点错过了它,它比这个答案要快。:)谢谢
GazB

3
在MVC 5中,如果您具有表单登录名,则在主页上单击“登录名”时,它仍将重定向到Home控制器,而不是路由中指定的自定义控制器。注册动作会做类似的事情。因此,除了更改routeconfig之外,还需要更改一些代码,以调用RedirectionToAction(“ Index”,“ Home”)并将其替换为您自己的控制器和动作名称。
an IBMer 2014年

值得指出的是,您可以拥有多条路线。这可能是BLANK URL参数的默认设置,但您可能想要第二条路由,例如url: "{controller}/{action}/{id}"。只需给路由指定不同的名称即可。
杰西

这个答案可能对您有用,但是如果您需要多个路线,请参见此处stackoverflow.com/a/8470531/1804678
Jess

1
此答案仅适用于MVC 3及更早版本。请参阅下面的答案,以获取推荐的MVC 4和更高版本的方法。
JTW

19

ASP.NET核心

路由是在该类的Configure方法中配置的Startup。要设置“主页”,只需添加以下内容。当用户导航到您网站的基本URL时,这将导致用户被路由到MapRoute方法中定义的控制器和操作,即,yoursite.com将用户路由到yoursite.com/foo/index:

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

ASP.NET之前的核心

如下所示,使用位于App_Start / RouteConfig.cs(MVC 3和4)或Global.asax.cs(MVC 1和2)中的RegisterRoutes方法。如果用户导航到站点的基本URL,这将导致用户被路由到MapRoute方法中定义的控制器和操作,即,yoursite.com会将用户路由到yoursite.com/foo/index:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}

5

步骤1:在解决方案中单击Global.asax文件。

步骤2:然后前往[定义]

RouteConfig.RegisterRoutes(RouteTable.Routes);

步骤3:更改控制器名称和视图名称

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

4
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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


2

MVC 5中的属性路由

在MVC 5之前,您可以通过调用routes.MapRoute(...)RouteConfig.cs文件将URL映射到特定的动作和控制器。这是主页网址的存储位置(Home/Index)。但是,如果您如下所示修改默认路由,

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

请记住,这将影响其他操作和控制器的URL。例如,如果您有一个名为的控制器类,并且其中有一个名为ExampleController的操作方法DoSomething,则ExampleController/DoSomething由于更改了默认路由,因此预期的默认url 将不再起作用。

一种解决方法是不要弄乱默认路由,并在RouteConfig.cs文件中为其他操作和控制器创建新路由,例如:

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

现在,该类的DoSomething操作ExampleController将映射到url hey/now。但是,每次要为不同动作定义路线时,这样做都会很繁琐。因此,在MVC 5中,您现在可以添加属性以将url匹配到类似这样的操作,

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}

1

我尝试了答案,但对我没有用。这就是我最终要做的事情:

创建一个新的控制器DefaultController。在索引操作中,我写了一行重定向:

return Redirect("~/Default.aspx")

在RouteConfig.cs中,更改路由的controller =“ Default”。

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

您可能忘记了省略控制器名称中的“控制器”一词,从而创建了默认路由
amarax

0

如果您不想更改路由器,只需转到HomeController并在索引中更改MyNewViewHere,如下所示:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.