2011-11-07 16 views
7

Gente,ASP.NET MVC 3: movió la aplicación al directorio virtual. ¿Qué tengo que cambiar?

He estado trabajando en una aplicación MVC 3. Estaba usando el servidor web incorporado de VS 2010. Hoy, por varias razones, me pidieron que lo moviera a un directorio virtual y lo ejecutara bajo IIS 7, todavía en mi PC de desarrollo.

Ahora que su URL es "localhost/MyVirtualDirectory" en lugar de "localhost: 12345", ¿qué necesito cambiar para que el enrutamiento funcione, y dónde?

No estoy usando ninguna etiqueta de anclaje HTML o redireccionamientos, solo @ Html.ActionLink y más. De acuerdo con lo que he leído, si he estado haciendo las cosas al estilo MVC, este cambio debería haber sido transparente.

Pero al principio, la redirección posterior a la autenticación falla. En la autenticación exitosa, se supone que debe devolver el resultado de

this.RedirectToAction("index", "Home") 

has adivinado: en lugar de "/ myVirtualDirectory/Inicio" la redirección va a "/ home". Lo cual falla

Falta algo que deba configurarse. ¿Qué es?

Gracias, todo.

+0

¿Qué hace su 'RegisterRoutes' se ve como en el Global.asax? –

+0

Probablemente configuró IIS incorrectamente. Esto debería ser completamente transparente. –

+0

@DarinDimitrov OK, estoy dispuesto a creer eso. ¿Las aplicaciones de MVC deben configurarse de forma diferente a las aplicaciones de WebForms? –

Respuesta

3

En IIS, elija su directorio virtual y "Convertir a aplicación". Además, si está utilizando el mapa de la ruta por defecto en su Global.asax debe decir algo como esto:

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

Razonamiento: Si usted pone su aplicación MVC en un subdirectorio de otra aplicación, entonces tendrá en cuenta el IIS raíz de esa otra aplicación en lugar de la raíz de su aplicación MVC. Si ese es el comportamiento que desea (poco probable), entonces usted necesita modificar su Global.asax que tener eso en cuenta:

routes.MapRoute(
    "Default", // Route name 
    "MyVirtualDirectory/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 
+0

Muchas gracias. Sin embargo, según IIS, mi directorio virtual ya es una aplicación. Tengo IIS7.5 y, en la vista de Contenido del sitio web predeterminado, mi directorio virtual tiene un "tipo" de aplicación. –

+0

De acuerdo, cuando escribió el directorio virtual en su pregunta lo tomé como un posible indicador de que no había especificado el directorio como una aplicación. Puede verificar la configuración del conjunto de aplicaciones, etc., pero como se mencionó anteriormente, probablemente se convierta en una pregunta más de serverfault.com. –

+0

Encontré mi problema, que resultó ser una URL derivada incorrectamente en una instrucción de redireccionamiento. La tuya es una buena respuesta a la pregunta, sin embargo, me equivoqué acerca de lo que realmente estaba sucediendo. ¡Muchas Gracias por responder! –

Cuestiones relacionadas