Установите "Домашняя страница" в Asp.Net MVC
В asp.net MVC "домашняя страница" (т.е. маршрут, отображаемый при попадании на www.foo.com), установлен на "Главная/Индекс".
- Где хранится это значение?
- Как я могу изменить "домашнюю страницу"?
- Есть ли что-то более элегантное, чем использование RedirectToRoute() в действии Index главного контроллера?
Я попробовал grepping для Home/Index в моем проекте и не смог найти ссылку, и не мог ничего увидеть в IIS (6). Я просмотрел страницу default.aspx в корне, но это, похоже, ничего не значило.
Спасибо
Ответы
Ответ 1
Посмотрите на Default.aspx/Default.aspx.cs
и файл Global.asax.cs
Вы можете настроить маршрут по умолчанию:
routes.MapRoute(
"Default", // Route name
"", // URL with parameters
new { controller = "Home", action = "Index"} // Parameter defaults
);
Просто измените имена контроллеров/действий на нужный по умолчанию. Это должен быть последний маршрут в таблице маршрутизации.
Ответ 2
Ядро ASP.NET
Маршрутизация настроена в методе Configure
класса Startup
. Чтобы установить "домашнюю страницу", просто добавьте следующее. Это приведет к тому, что пользователи будут перенаправляться на контроллер и действие, определенное в методе MapRoute, когда/если они будут перемещаться по базовому URL вашего сайта, т.е. Ваш сайт будет маршрутизировать пользователей на ваш сайт .com/foo/index:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=FooController}/{action=Index}/{id?}");
});
Ядро Pre-ASP.NET
Используйте метод RegisterRoutes, расположенный в App_Start/RouteConfig.cs(MVC 3 и 4) или Global.asax.cs(MVC 1 и 2), как показано ниже. Это приведет к тому, что пользователи будут перенаправляться на контроллер и действие, определенное в методе MapRoute, если они будут перемещаться по базовому URL вашего сайта, т.е. Ваш сайт будет перенаправлять пользователя на ваш сайт .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 }
);
}
Ответ 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 = "Your Controller", action = "Your Action", id = UrlParameter.Optional }
);
}
}
Ответ 4
проверить метод RegisterRoutes в global.asax.cs - это место по умолчанию для настройки маршрута...
Ответ 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 }
);
}
}
Ответ 6
Маршрутизация атрибутов в MVC 5
До MVC 5 вы могли сопоставлять URL-адреса определенным действиям и контроллерам, вызывая 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
, то ожидаемый URL-адрес по умолчанию ExampleController/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();
}
}
Ответ 7
Я попробовал ответить, но это не сработало для меня. Вот что я сделал:
Создайте новый контроллер DefaultController. В действии индекса я написал одну переадресацию строки:
return Redirect("~/Default.aspx")
В RouteConfig.cs измените контроллер = "По умолчанию" для маршрута.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
Ответ 8
Если вы не хотите менять маршрутизатор, просто перейдите к HomeController и измените MyNewViewHere в индексе следующим образом:
public ActionResult Index()
{
return View("MyNewViewHere");
}