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

在asp.net MVC中,“主页”(即打到www.foo.com时显示的path)被设置为Home / Index。

  • 这个值在哪里存储?
  • 我怎样才能改变“主页”?
  • 在主控制器的索引操作中,有没有比使用RedirectToRoute()更优雅的东西?

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

谢谢

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

您可以设置一个默认路由:

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

只需将控制器/操作名称更改为所需的默认值即可。 这应该是路由表中的最后一个路由。

使用位于App_Start / RouteConfig.cs中的RegisterRoutes方法,如下所示。 这将导致用户被路由到新的MapRoute声明中定义的控制器和动作,如果他们导航到您的网站的URL没有URL参数,即www.yoursite.com将路由用户www.yoursite.com/foo /指数:

 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 } ); } 

ASP.NET核心

路由在Startup类的Configure方法中Configure 。 要设置“主页”,只需添加以下内容:

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

检查global.asax.cs中的RegisterRoutes方法 – 这是路由configuration的默认位置…

 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 } ); } } 

MVC中的属性路由5

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

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

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

解决方法是不要混淆默认路由并在RouteConfig.cs文件中为其他操作和控制器创build新路由,

 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 } ); 

现在, ExampleController类的DoSomething动作将被映射到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步:在解决scheme中单击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 } ); } } 

我试了答案,但它没有为我工作。 这就是我最终做的事情:

创build一个新的控制器DefaultController。 在索引操作中,我写了一行redirect:

 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 } );