2010-03-25 21 views
13

tengo una carpeta de imágenes almacenados en ~/contenido/Imágenes/¿ruta del controlador no encontrada para imágenes estáticas? ¿Problema de enrutamiento asp.net mvc?

Estoy cargando estas imágenes a través de

<img src="/Content/Images/Image.png" /> 

Recientemente, las imágenes no se cargan y yo estoy recibiendo los siguientes errores en el error Iniciar sesión. Lo extraño es que algunas imágenes cargan bien, mientras que otras no se cargan.

¿Alguien tiene alguna idea de lo que está mal en mis rutas? ¿Me falta una ruta de ignorar para la carpeta/Content /?

También estoy recibiendo el mismo error de favicon.ico y un montón de otros archivos de imagen ...

<Fatal> -- 3/25/2010 2:32:38 AM -- System.Web.HttpException: The controller for path '/Content/Images/box_bottom.png' could not be found or it does not implement IController. 
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(Type controllerType) 
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) 
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) 
at System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Mis rutas actuales se ven así:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

     routes.MapRoute(
      "ControllerDefault",            // Route name 
      "{controller}/project/{projectid}/{action}/{searchid}",       // URL with parameters 
      new { controller = "Listen", action = "Index", searchid = "" } // Parameter defaults 
     ); 

Gracias!

+0

¿Alguna vez encontrar una solución, teniendo el mismo problema al publicar – Stefanvds

Respuesta

5

Insertaría otra ruta ignorada inmediatamente debajo de la primera.

routes.IgnoreRoute("Content/Images/{*pathInfo}"); 
+0

Voy a probar esto ... pero el El problema solo ocurre en la etapa (no en dev), por lo que no será hasta que yo pueda probar. – rksprst

+0

¿Has probado eso? –

+0

Sí, sigue siendo el mismo error. – rksprst

0

Usted no tiene routes.RouteExistingFiles = true; algún lugar ¿verdad?

+0

No, no tengo eso en ninguna parte. – rksprst

3

Si miras la vista del explorador de soluciones, supongo que tu carpeta de Contenido está en la raíz del proyecto junto con una carpeta para Controladores y Vistas. Tratando de modificar su imagen src como se muestra a continuación ...

<img src="../../Content/Images/Image.png" /> 
+1

Eso no funcionaría para mí ... Necesito usar la ruta raíz (/ Content/Images) porque esas imágenes están referenciadas en archivos css que son independientes en dev, y son minificados y combinados en producción (perdiendo así su ubicación relativa)) Pero, ¿por qué iba a ayudar esto de todos modos? – rksprst

+0

@rksprst: He tenido el mismo problema y lo he resuelto así. En este momento '/ Content/Images/Image.png' se verá dentro de la carpeta de acción de vistas para la imagen ... No está saliendo de la carpeta '~/Content/Images /'. – RSolberg

1

tiene que declarar las rutas menos específicos a la parte inferior:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
    "ControllerDefault", 
    "{controller}/project/{projectid}/{action}/{searchid}", 
    new { controller = "Listen", action = "Index", searchid = "" } 
); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = "" } 
); 

Pero no creo que este es el problema aquí. A partir de la excepción, parece que el servidor web que ejecuta esta aplicación tiene una asignación de comodín con el filtro aspnet_isapi, lo que significa que todos los archivos estarán asociados con el tiempo de ejecución de ASP.NET, incluso los archivos estáticos.

+0

Sí, puede hacer ese pequeño truco en IIS donde primero simula la carpeta de contenido como un directorio virtual, elimina la asignación de comodín y luego elimina la carpeta de contenido como si fuera un directorio virtual. Esto deberia resolver el problema. – David

2
<img src="<%= Url.Content("~/Content/Images/Image.png")%>" alt="does this work?" /> 
+1

oops, respondió con una pregunta. -1 – ScottG

0

La excepción ... could not be found or it does not implement IController no tiene que ser un error. En realidad, /favicon.ico no se resuelve en un controlador, por lo que significa que el siguiente módulo (¿o es el controlador?) Debería tratar de manejar la solicitud. Entonces, de alguna manera, es una "excepción esperada".

El problema es cuando esta excepción se registra y obstruye los registros. Al utilizar log4net, añadiendo el elemento <filter> siguiente al appender por defecto debería mantenerlo fuera:

<filter type="log4net.Filter.StringMatchFilter"> 
    <regexToMatch value="System.Web.HttpException \(0x80004005\): The controller for path '[^']*' was not found or does not implement IController\." /> 
    <acceptOnMatch value="false" /> 
</filter> 
Cuestiones relacionadas