Как настроить маршрут для главной страницы сайта ASP.NET MVC?

Я работаю с сайтом ASP.NET MVC, который будет использовать CMS-контроллер для всех страниц сайта, кроме главной страницы. Здесь идея:

Домашний контроллер:

  • www.site.com
  • www.site.com/default.aspx

Контроллер CMS:

  • www.site.com/about
  • www.site.com/agenda/schedule
  • www.site.com/monkey/eats/spaghetti
  • (почти все остальное)

На этой странице перечислены некоторые параметры настройки маршрутизации по умолчанию:

  • Оставьте Default.aspx незанятым и unredirected как точку входа в ваше приложение - со статическими ссылками, которые передают ваших пользователей в часть MVC приложения (или другой статический контент).
  • Перенаправить Default.aspx в код позади, используя код обработчика событий Page_Load или использовать Response.Redirect( "~/home" ), чтобы отправить их на главный контроллер (хотя это перенаправление туда и обратно).
  • Переименовать или удалить Default.aspx. Несмотря на предупреждение в разметке, в котором указано, что default.aspx требуется для обеспечения того, чтобы ASP.NET MVC активировался IIS, когда пользователь делает запрос "/"... он фактически не нужен ни серверу VS dev, ни IIS7, Запрос по умолчанию останется корневым запросом приложения "/" и будет пойман по маршруту по умолчанию и отправлен на домашний контроллер.

Я предполагаю, что еще один вариант - просто использовать один контроллер с некоторой логикой, которая обнаруживает случай с домашней страницей, но, похоже, это борьба с концепцией.

Как вы рекомендуете настраивать определенный маршрут для домашней страницы сайта?

Ответы

Ответ 1

www.site.com может обрабатываться корневым маршрутом

routes.MapRoute(
    "Root",
    "",
    new { controller = "Home", action = "Index", id = "" }
);

Поместите следующее на странице загрузки Default.aspx

HttpContext.Current.RewritePath(Request.ApplicationPath, false);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);

Это перезаписывает запрос root и обрабатывается маршрутом карты выше.

Кстати, вы действительно можете найти код из проекта шаблона MVC.

Ответ 2

Если хостинг в интегрированном режиме IIS7, я предлагаю просто избавиться от default.aspx. Насколько я понимаю, это необходимо только для активации в классическом режиме IIS6 и IIS7.

Ответ 3

Я думаю, что вариант №1 проще всего. Я, вероятно, буду придерживаться этого, пока не найду сильную причину для перехода или поиска альтернативы. Шаблон по умолчанию использует этот подход.

[ОБНОВЛЕНИЕ] Кантон побил меня к ней