2011-01-07 8 views
59

ich einen Fehler:mvc: sucht das favicon.ico auch nach einem Controller?

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

Dann dachte ich: woher weiß der Rahmen für die Dateien, die es einen Controller zu instanziiert hat, weil das gleiche für Skript, CSS und andere Dateien wahr ist?

(nie gedacht, aber jetzt ist das Favicon beschwert, ich habe mich gefragt, ....)

auf den Fehler aber wieder, warum das auftritt?

+2

möglich duplicate von [Serving favicon.ico in ASP.NET MVC] (http://stackoverflow.com/questions/487230/serving-favicon-ico-in-asp-net-mvc) – codingbadger

Antwort

101

Fügen Sie diese auf Sie global.asax:

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

Danke, das hat super funktioniert . Ich benutzte ELMAH und es gab mir einen Fehler. Um sicherzustellen, dass in ELMAH kein Fehler über favicon.ico angezeigt wird, stellen Sie sicher, dass Sie auch die Datei "favicon.ico" im Stammordner Ihrer Site hinzufügen. – mateuscb

4

Sie wahrscheinlich diesen Server mit dem VS-Bahn bekommen. Recht?

Sie würden dies nicht mit IIS bekommen, da IIS (standardmäßig) Anfragen nach Bildern (.ico, .jpg, .gif usw.) behandelt und sie deshalb nicht in Ihre App gelangen.

+0

Meine erste Reaktion war ja, aber nein, es ist auch auf iis6 + win2003 – Michel

+1

Auch auf IIS 7. Sie müssen die ignorroute für favicon und für robots.txt auch hinzufügen. –

+2

IIS 7 hat diese ["integrierte Pipeline"] (http://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/how-to- take- Advantage-of-the- iis-integrated-pipeline), bei der HTTP-Handler bei so ziemlich jeder URL, die die Website IIRC erreicht, einen Crack bekommen. – cHao

19

Sie können auch die ignorieren angeben Route mit Einschränkungen

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

Gibt es Gründe, einen komplexen Ansatz zu verwenden, wenn die einfache 'routes.IgnoreRoute (" favicon.ico ");' genug zu sein scheint? Vielleicht versucht ein Browser, das Favicon automatisch zu erhalten und verwendet eine lustige URL? – ANeves

+2

Der einfache Ansatz funktioniert nur, wenn favicon.ico im Stammverzeichnis der Site platziert ist, wie @mateuscb in seinem Kommentar darauf hingewiesen hat. Wenn es jedoch woanders platziert wird, wie in http://stackoverflow.com/questions/487230/ beschrieben, serving-favicon-ico-in-asp-net-mvc dann brauchen wir diesen komplizierteren ansatz. –

+1

Jeder, der dieses Code-Snippet verwendet, sollte wissen, dass es einen Syntaxfehler gibt, da "routes" kleingeschrieben sein sollte, da es sich um eine Instanz handelt und nicht um einen Typ –

0

Interessante, wie es klingt ich diesen Fehler bekam nur, wenn ich die „My-Code aktivieren Sie einfach“ geprüft hatte Option unter tools->options->debugging, und sobald ich nicht angehakt Ich bekomme diesen Fehler nicht mehr.

Beachten Sie jedoch, dass der Fehler immer noch hinter den Kulissen angezeigt wird, aber intern sofort abgefangen wird. Daher ist die beste Lösung, die Datei global.asax so zu codieren, dass sie ignoriert wird.

13

Die oberen Antworten sind korrekt.

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

Aber für neuere Versionen von MVC müssen Sie dies der RegisterRoutes Methode in RouteConfig.cs (so irgendwo vor routes.MapRoute (..) genannt wird) an der Spitze hinzu.

Verwandte Themen