Как настроить маршрут для главной страницы сайта 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 проще всего. Я, вероятно, буду придерживаться этого, пока не найду сильную причину для перехода или поиска альтернативы. Шаблон по умолчанию использует этот подход.
[ОБНОВЛЕНИЕ] Кантон побил меня к ней