Pregunta

Esto parece que debería ser fácil, pero por alguna razón no tengo suerte. Estoy migrando una aplicación WebForms existente a MVC, por lo que necesito mantener la raíz del sitio apuntando a mis páginas ASPX existentes por ahora y solo aplicar el enrutamiento a las rutas con nombre. Esto es lo que tengo:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        RouteTable.Routes.Add(
            "Root",
            new Route("", new DefaultRouteHandler())
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Calendar2", action = "Index", id = "" }  // Parameter defaults
        );
    }

Por lo tanto, se deben ignorar las páginas ASPX, y la URL de raíz predeterminada debe ser manejada por este controlador:

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
                "~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler;
    }
}

Esto parece funcionar bien, pero el YPOD resultante me da esto:

Se encontraron múltiples controles con la misma identificación '__page'. Trace requiere que los controles tengan ID únicos.

Lo que parece implicar que la página se está volviendo dos veces de alguna manera. Si simplemente escribo la URL en mi página del tablero directamente funciona bien (sin enrutamiento, sin error). No tengo idea de por qué el código del controlador estaría haciendo algo diferente.

En pocas palabras, me gustaría simplemente redirigir la ruta de la URL de la raíz a un ASPX de mi elección, ¿alguien puede arrojar algo de luz?

¿Fue útil?

Solución 2

Hmmmm. Entonces, mi navegador se bloqueó por una razón no relacionada, y ahora que lo he reiniciado, el código anterior parece estar funcionando perfectamente como se esperaba. Estoy completamente confundido acerca de cómo el código del lado del servidor ahora actuaría de manera diferente debido a un reinicio del navegador (aparentemente de alguna manera algo se almacenó en caché incorrectamente, supongo), pero parece que ahora esto no es un problema.

EDITAR: Bueno, esto sigue siendo un problema, no estoy seguro de por qué funcionó antes, pero es un poco aleatorio. La conclusión parece ser que MVC no parece jugar bien con el rastro. Realmente no tengo una buena explicación, pero deshabilitando el rastreo en Web.Config omite el error. Para mis propósitos por ahora eso es lo suficientemente bueno, pero me encantaría escuchar una mejor explicación de otra persona ...

Otros consejos

Realmente no entiendo tu problema, puede que no soy lo suficientemente experto. De todos modos intentaré ...;)

Si desea redirigir desde la ruta de la raíz, ¿por qué no usar el documento predeterminado de IIS, colóquelo en index.aspx, por ejemplo y luego agregue en esta página una respuesta. Redirect a la página a la que desea redirigir?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top