Как настроить маршрут для домашней страницы сайта ASP.NET MVC? - PullRequest
14 голосов
/ 08 апреля 2009

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

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

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

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

  • www.site.com / о
  • www.site.com / Agenda / график
  • www.site.com / обезьяна / ест / спагетти
  • (почти все остальное)

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 08 апреля 2009

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.

3 голосов
/ 08 апреля 2009

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

0 голосов
/ 08 апреля 2009

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

[ОБНОВЛЕНИЕ] Кантон избил меня до этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...