2009-04-08 4 views
14

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

Главная Контроллер:

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

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

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

This page перечислены некоторые варианты о том, как настроить маршрутизации страницы по умолчанию:

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

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

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

ответ

14

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

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

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

3

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

0

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

[ДОПОЛНЕНО] Кантон избил меня к нему