2009-04-08 15 views
14

Estoy trabajando con un sitio ASP.NET MVC que utilizará un controlador CMS para todas las páginas del sitio, excepto para la página de inicio. Esta es la idea:¿Cómo configuro una ruta para la página de inicio de un sitio ASP.NET MVC?

controlador de Inicio:

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

controlador CMS:

  • www.site.com/about
  • www.site.com/agenda/schedule
  • www.site.com/monkey/eats/spaghetti
  • (casi cualquier cosa)

This page listas algunas opciones sobre cómo configurar una ruta de página por defecto:

  1. Dejar Default.aspx sin enrutamiento y unredirected como punto de entrada a la aplicación - con enlaces estáticos que tienen sus usuarios en la parte de MVC de la aplicación (o de otros contenidos estáticos).
  2. Redirigir Default.aspx en el código subyacente, ya sea utilizando el código del controlador de eventos Page_Load, o use Response.Redirect ("~/home") para enviarlos al controlador doméstico (aunque este es un redireccionamiento de ida y vuelta).
  3. Cambie el nombre o elimine Default.aspx. A pesar de la advertencia en el marcado que dice que se requiere default.aspx para garantizar que ASP.NET MVC esté activado por IIS cuando un usuario realiza una solicitud "/" ... en realidad no es necesario en el servidor de desarrollo VS o IIS7 . La solicitud predeterminada seguirá siendo una solicitud raíz de la aplicación "/" y será capturada por la ruta predeterminada y enviada al controlador doméstico.

supongo que otra opción es usar un controlador con cierta lógica que detecta el caso página de inicio, pero que parece ser la lucha contra el concepto.

¿Cómo se recomienda configurar una ruta específica para la página de inicio del sitio?

Respuesta

14

www.site.com puede ser manejado por un mapa de rutas de raíz

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

Ponga lo siguiente en carga de la página Default.aspx de

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

Esto reescribe la solicitud de raíz y manejado por la ruta del mapa de arriba.

Por cierto, puedes encontrar el código del proyecto de plantilla MVC.

3

Si está alojado en modo integrado IIS7, sugiero simplemente deshacerse de default.aspx. Según tengo entendido, solo es necesario para la activación en el modo clásico IIS6 e IIS7.

0

Creo que la opción n. ° 1 es la más fácil. Probablemente me mantendré hasta encontrar una razón fuerte para moverme o encontrar la alternativa. La plantilla predeterminada usa este enfoque.

[ACTUALIZACIÓN] Canton me ganó

Cuestiones relacionadas