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?

¿Fue útil?

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.

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