Me tomó un poco, pero me di cuenta de cómo hacer que las extensiones funcionen con IIS 6. Primero, debe volver a trabajar el enrutamiento base para incluir .aspx para que se enruten a través del Filtro ASP.NET ISAPI.
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Si navega a Home.aspx, por ejemplo, su sitio debería funcionar correctamente. Pero Default.aspx y la dirección de página predeterminada de http://[website]/ dejan de funcionar correctamente. Entonces, ¿cómo es eso arreglado?
Bueno, debe definir una segunda ruta. Desafortunadamente, usando Default.aspx como la ruta no funciona correctamente:
routes.MapRoute(
"Default2", // Route name
"Default.aspx", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Entonces, ¿cómo se consigue esto para trabajar? Bueno, aquí es donde se necesita el código de enrutamiento original:
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Al hacer esto, Default.aspx y http://[website]/ tanto empezar a trabajar de nuevo, creo que debido a que se ha asignado correctamente al controlador principal. Así que la solución completa es:
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Y su sitio debe empezar a trabajar bien bajo IIS 6. (Por lo menos lo hace en mi PC.)
Y como un bono, si está utilizando HTML. ActionLink() en sus páginas, no debería tener que cambiar ninguna otra línea de código en todo el sitio. Este método se encarga de etiquetar correctamente la extensión .aspx del controlador.
Gracias por esta pregunta: afortunadamente tropecé con ella antes de pasar mucho tiempo en un nuevo proyecto en MVC que tiene que ejecutarse bajo IIS6. Es bueno saber que esto es un problema antes de que llegue demasiado lejos ... – cori