2011-01-07 21 views
59

consigo un error:mvc: ¿el favicon.ico también busca un controlador?

"The controller for path '/favicon.ico' was not found or does not implement IController"

luego pensé: ¿cómo sabe el marco de qué archivos se tiene que crear una instancia de un controlador, porque lo mismo es cierto para el script, CSS y otros archivos?

(nunca pensado en eso, pero ahora el favicon se queja, me preguntaba ....)

Pero volviendo al error, ¿Por qué ocurre eso?

+2

posible duplicado de [Servir favicon.ico en ASP.NET MVC] (http://stackoverflow.com/questions/487230/serving-favicon-ico-in-asp-net-mvc) – codingbadger

Respuesta

101

Añadir esto a usted global.asax:

routes.IgnoreRoute("favicon.ico"); 
+4

Gracias, funcionó muy bien . Estaba usando ELMAH y me seguía dando un error. Para asegurarse de que no aparece ningún error sobre favicon.ico en ELMAH, asegúrese de agregar también el archivo "favicon.ico" en la carpeta raíz de su sitio. – mateuscb

4

Usted probablemente está recibiendo esto con el servidor web VS. ¿Derecha?

No obtendrá esto con IIS ya que IIS (de forma predeterminada) maneja las solicitudes de imágenes (.ico, .jpg, .gif, etc.) y, por lo tanto, no lo hacen en su aplicación.

+0

mi primera reacción fue sí, pero no, también es en iis6 + win2003 – Michel

+1

También en IIS 7. También debe agregar ignoreroute para favicon y para robots.txt. –

+2

IIS 7 tiene esto ["pipeline integrado"] (http://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/how-to-take-advantage-of-the- Lo que ocurre es que los manejadores de HTTP obtienen un crack en prácticamente cualquier URL que llegue al sitio, IIRC. – cHao

19

También puede especificar la ruta ignorar con limitaciones

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 
+0

¿Hay algún razonamiento detrás del uso de un enfoque complejo cuando el simple 'routes.IgnoreRoute (" favicon.ico ");' parece ser suficiente? Tal vez algún navegador intente obtener automáticamente el favicon y use una URL divertida. – ANeves

+2

El enfoque simple funcionaría solo si favicon.ico se coloca en la raíz del sitio como @mateuscb señaló en su comentario, sin embargo, si uno lo coloca en otro lugar como se describe en http://stackoverflow.com/questions/487230/ serving-favicon-ico-in-asp-net-mvc, entonces necesitamos este enfoque más complicado. –

+1

Cualquiera que use este fragmento de código debe tener en cuenta que hay un error de sintaxis, ya que "rutas" debe estar en minúsculas ya que estamos tratando con una instancia y no con un tipo –

0

interesantes como suena Tengo este error sólo si hubiera marcado la casilla "Habilitar Sólo mi código" opción bajo tools->options->debugging, y tan pronto como que yo no se ya no estoy obteniendo este error.

Sin embargo, tenga en cuenta que parece que el error todavía se lanza tras bambalinas, pero se captura inmediatamente de forma interna, por lo que la mejor solución es codificar en el archivo.asax para ignorarlo como sugieren las otras respuestas.

13

Las mejores respuestas son correctas.

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

Sin embargo, para las nuevas versiones de MVC debe agregar esta en la parte superior de la RegisterRoutes método en el RouteConfig.cs (por lo que en algún lugar antes routes.MapRoute (..) se llama).

Cuestiones relacionadas