107

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

  • 这个值存储在哪里?
  • 如何更改“主页”?
  • 有什么比在 home 控制器的 Index 操作中使用 RedirectToRoute() 更优雅的吗?

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

谢谢

4

8 回答 8

156

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

您可以设置默认路由:

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

只需将控制器/操作名称更改为您想要的默认值。那应该是路由表中的最后一条路由。

于 2009-07-17T08:27:30.080 回答
25

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 Core

使用位于 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 }
    );
}
于 2014-04-26T18:05:13.140 回答
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 }
                        );
    }
}
于 2016-08-07T16:05:57.073 回答
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 }
        );
    }
}
于 2015-07-28T09:34:24.883 回答
4

MVC 5 中的属性路由

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

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

请记住,这将影响其他操作和控制器的 URL。例如,如果您有一个名为的控制器类ExampleController和一个名为 的操作方法DoSomething,那么预期的默认 urlExampleController/DoSomething将不再有效,因为默认路由已更改。

解决方法是不要弄乱默认路由,并在 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();
    }
}
于 2017-06-05T14:26:21.563 回答
3

检查 global.asax.cs 中的 RegisterRoutes 方法 - 这是路由配置的默认位置...

于 2009-07-17T08:26:17.163 回答
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 }
        );
于 2016-07-02T01:43:04.730 回答
0

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

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
于 2019-04-16T03:26:26.223 回答