2009-04-27 22 views
13

Estoy usando IIS 6. Creo que mi problema es que no sé cómo enrutar a un controlador que no utiliza el routes.MapRoute.ASP.NET MVC Enrutamiento para comenzar en la página html

Tengo una URL como example.com y quiero que sirva la página index.htm y no use MVC. ¿Cómo configuro eso? En IIS, tengo index.htm como mi documento de inicio y mi global.asax tiene el enrutamiento "predeterminado" estándar, donde llama a Inicio/Índice.

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

que añade esto:

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     if (Context.Request.FilePath == "/") Context.RewritePath("index.htm"); 
    } 

funciona. Pero, ¿es esta la mejor solución?

+0

Creo que es interesante que indique que está ejecutando IIS6. No puedo evitar pensar que va a ser un factor clave en la solución –

Respuesta

-1

routes.IgnoreRoute?

Además, ver a esta pregunta: How to ignore route in asp.net forms url routing

+0

Agregué esto: routes.Add (nueva ruta ("{resource} .htm/{* pathInfo}", nueva StopRoutingHandler())) ; No funcionó. agregó esto: routes.IgnoreRoute ("{resource} .htm/{* pathInfo}"); tampoco funcionó – Marsharks

+0

¿En qué orden lo agregó? Creo que es importante que la ruta StopRoutingHandler sea la primera de la lista. –

+0

Lo agregué antes de las rutas. Añadir ahora ¡Tengo un problema con las páginas asp que no se cargan! – Marsharks

18

he añadido un controlador de maniquí para su uso como el controlador por defecto cuando no se especifica la raíz del sitio web. Este controlador tiene una sola acción de índice que redirige al sitio index.htm en la raíz.

public class DocumentationController : Controller 
{ 
    public ActionResult Index() 
    { 
     return Redirect(Url.Content("~/index.htm")); 
    } 

} 

Tenga en cuenta que estoy utilizando esta como la documentación de un servicio web REST basado en MVC. Si va a la raíz del sitio, obtiene la documentación del servicio en lugar de algún método de servicio web predeterminado.

+1

Primera respuesta aceptable que he visto después de varios rebotes alrededor de SO. ¡Gracias! –

+2

Esto causaría una solicitud adicional para obtener el index.html –

+0

Buena respuesta y fácil de implementar. – Del

-1

IIS6 tiene algunas diferencias con IIS7 en la forma en que ASP.NET funciona con él. Consulte este blog post de Phli Haack sobre cómo configurar esta configuración para usar con ASP.NET MVC. ¡Buena suerte!

6

configurar el enrutamiento asp.net ignorar root ("/") requests y dejar IIS's "Default Document" filtro ISAPI servir al index.htm archivo estático

Añadir el siguiente al método RegisterRoutes.

routes.IgnoreRoute(""); 
1

La mejor solución es eliminar el controlador predeterminado. Se está encontrando con este problema, porque está especificando tanto la página predeterminada como la ruta predeterminada sin ningún parámetro.

Al eliminar el controller = "Home" en los valores predeterminados de ruta, el / ya no coincidirá con la ruta y, como ninguna otra ruta satisfará, IIS buscará en los documentos predeterminados.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",       // URL with parameters 
     new { action = "Index", id = "" }      // Parameter defaults 
    ); 
} 
Cuestiones relacionadas