2010-01-21 5 views
52

Recibo un error extraño en mi servidor web por aparentemente todos los archivos excepto los archivos .aspx.Recibo un error "No implementa IController" en imágenes y robots.txt en MVC2

Aquí hay un ejemplo. Basta con sustituir '/robots.txt' con cualquier nombre .jpg o .gif o lo que sea y obtendrá la idea:

El controlador de ruta '/robots.txt' no se ha encontrado o no implementa IController.

Estoy seguro de que tiene algo que ver con la configuración del enrutamiento, pero no estoy seguro de qué hacer exactamente al respecto.

Además, este es un sitio mixto MVC y WebForms, si eso hace la diferencia.

+0

¿Está utilizando 'IControllerFactory' personalizado? –

+0

¿Qué sucede si está utilizando un IControllerFactory, qué entonces @ DanielA.WhiteZ? – Zac

+0

Suena como un problema con el controlador para archivos estáticos. Solo digo. –

Respuesta

72

Puede ignorar robots.txt y todas las páginas aspx en su enrutamiento.

routes.IgnoreRoute("{*allaspx}", new {[email protected]".*\.aspx(/.*)?"}); 
routes.IgnoreRoute("{*robotstxt}", new {[email protected]"(.*/)?robots.txt(/.*)?"}); 

Es posible que desee ignorar el favicon también.

routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"}); 

Puede ajustar la expresión regular para excluir las rutas.

Desde el source.

+0

Me gusta esta solución, apesta, pero voy a tener que agregar una para cada tipo de archivo. .jpg, .png, .gif, .swf, .pdf, etc. etc. –

+0

@blesh - ¿está usando un 'IControllerFactory' personalizado? –

+0

No ... pero mirándolo, creo que puedo comenzar. ¿Por qué preguntas? –

2

me pareció demasiado another solution ... Aunque no creo que lo usaré, vale la pena mostrar aquí en las respuestas:

Lo que sigue debe (en teoría) ignorar buscando controladores para cualquier cosa con una ''. en eso.

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults 
    new { controller = @"[^\.]*" }       // Parameter contraints. 
); 
2

¿Todavía tiene:

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

... en sus Global.asax.cs?

MVC pone allí por defecto, y se supone que debe manejar esto.

Si lo hace, entonces el problema puede ser cómo está mezclando MVC y WebForms.

+2

¡Y asegúrate de que esté en la parte superior! – Martin

+0

Lo tengo ... pero está debajo de 'routes.IgnoreRoute (" {resource} .aspx/{* pathInfo} ");' ¿eso es un problema? –

+0

No debería ser un problema. –

6

Este error también podría ocurrir si dentro de una vista en su área, utiliza el ayudante Html.Action. Este ayudante siempre utilizará el área como anteponer, a menos que específicamente dice que no. Por ejemplo,

@Html.Action("Main", "Navigation", new { area = string.Empty }) 
+0

Tu respuesta ha resuelto mi otro problema relacionado con @ Html.Action – irfandar

15

La ruta ignorar dada anteriormente no funcionó para mí, pero me encontré con uno similar que hizo:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" }); 
0

me encontré con este error cuando solicito recursos que no existían.

Específicamente, estaba solicitando un archivo personalizado de IE CSS:

<!--[if lt IE 8]>@Styles.Render("~/Content/ie7.css")<![endif]-->

(Estos son condition comments, interpretado por el IE)

Sin embargo, el recurso real existía en ~/Contenido/ie/ie7.css.

Por lo tanto, sin ninguna modificación en el enrutamiento, el error se solucionó utilizando la URL correcta del recurso.

+1

Por curiosidad, ¿por qué molestarse con la condición de comentarios si puedes detectar la versión del navegador en un servidor @block y simplemente no renderizar los estilos extra? – mikeschuld

+0

Bueno, en realidad nunca me molesté. El CSS y la mayor parte del recargo eran obra de un compañero de equipo. Supongo que es solo el resultado del deseo de un diseñador front-end de mantener todo bajo control. Desencadenado por su observación, acabo de leer en [MSDN - Acerca de los comentarios condicionales] (https://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx) que se ha eliminado la compatibilidad en el modo de estándares IE10, entonces, tendremos que investigar esto. –

Cuestiones relacionadas