ASP.NET MVC en un directorio virtual
-
06-07-2019 - |
Pregunta
Tengo lo siguiente en mi Global.asax.cs
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Mi SearchController se ve así
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
e Index.aspx simplemente muestra ViewData [" partnerID "] en este momento.
Tengo un directorio virtual configurado en IIS en Windows XP llamado Prueba.
Si apunto mi navegador a http: // localhost / Test / , obtengo 1000 como se esperaba. Sin embargo, si intento http: // localhost / Test / 1000 obtengo un error de página no encontrada. ¿Alguna idea?
¿Hay alguna consideración especial para ejecutar MVC en un directorio virtual?
Solución
IIS 5.1 interpreta su url de tal manera que está buscando una carpeta llamada 1000 bajo la carpeta llamada Test. ¿Por qué es así?
Esto sucede porque solo IIS 6 invoca ASP.NET cuando ve un "Extensión de nombre de archivo" en la URL que es mapeado a aspnet_isapi.dll (que es un Filtro C / C ++ ISAPI responsable de invocando ASP.NET). Como el enrutamiento es un .NET IHttpModule llamado UrlRoutingModule, no se obtiene invocado a menos que ASP.NET mismo obtenga invocado, que solo ocurre cuando Se invoca aspnet_isapi.dll, que solo ocurre cuando hay un .aspx en la URL Entonces, no .aspx, no UrlRoutingModule, de ahí el 404.
La solución más fácil es:
Si no le importa tener .aspx en su URLs, solo sigue tu ruta config, agregando .aspx antes de un barra inclinada hacia adelante en cada patrón. por ejemplo, use {controller} .aspx / {action} / {id} o myapp.aspx / {controller} / {action} / {id}. No coloque .aspx dentro del nombres de parámetros de paréntesis, o en los valores "predeterminados", porque no es realmente parte del nombre del controlador solo está en la URL para satisfacer IIS.
Fuente: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
Otros consejos
Si está haciendo esto en Windows XP, entonces está usando IIS 5.1. Necesita obtener ASP.Net para manejar su solicitud. Debe agregar una extensión a sus rutas ({controller} .mvc / {action} / {id}) y asignar esa extensión a ASP.Net o asignar todas las solicitudes a ASP.Net. El http: // localhost / Test funciona porque va a Default.aspx, que se maneja especialmente en proyectos MVC.
Además, debe especificar http: // localhost / Test / Search / Index / 1000 . El controlador y las piezas de acción no son opcionales si desea especificar una ID.
Existen varias consideraciones al usar directorios virtuales en su aplicación.
Una de ellas es que la mayoría de los navegadores no enviarán cookies que provienen de un directorio virtual a otro, incluso si las aplicaciones residen en el mismo servidor.
Intente establecer la ruta virtual: haga clic con el botón derecho en proyecto mvc, propiedades, pestaña web, ingrese la ubicación adecuada.