2010-01-21 2 views
52

Ich bekomme einen seltsamen Fehler auf meinem Webserver für scheinbar jede Datei außer den ASPX-Dateien.Ich bekomme einen Fehler "Implementiert IController nicht" auf Bildern und robots.txt in MVC2

Hier ist ein Beispiel. Ersetzen Sie einfach ‚/robots.txt‘ mit jedem .jpg Namen oder .gif oder was auch immer, und Sie bekommen die Idee:

Der Controller für Pfad ‚/robots.txt‘ nicht gefunden wurde oder nicht implementiert IController.

Ich bin mir sicher, dass es etwas damit zu tun hat, wie ich das Routing eingerichtet habe, aber ich bin mir nicht sicher, was genau ich tun muss.

Auch dies ist eine gemischte MVC und WebForms Website, wenn das einen Unterschied macht.

+0

Verwenden Sie benutzerdefinierte 'IControllerFactory'? –

+0

Was ist, wenn Sie eine IControllerFactory verwenden, was dann @ DanielA.WhiteZ? – Zac

+0

Klingt wie ein Problem mit dem Handler für statische Dateien. Sag es einfach. –

Antwort

72

Sie können robots.txt und alle aspx-Seiten in Ihrem Routing ignorieren.

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

Vielleicht möchten Sie auch das Favicon ignorieren.

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

Sie können den regulären Ausdruck anpassen, um Pfade auszuschließen.

Haacked aus der source.

+0

Ich mag diese Lösung, es ist zum Kotzen Ich muss für jeden Dateityp eine hinzufügen. .jpg, .png, .gif, .swf, .pdf, usw. usw. –

+0

@blesh - verwenden Sie eine benutzerdefinierte 'IControllerFactory'? –

+0

Nein ... aber wenn ich nachdenke, denke ich, dass ich anfangen kann. Warum fragst du? –

2

ich another solution auch gefunden ... Während ich ich es nicht verwenden denken werde, es lohnt sich hier in den Antworten zeigt:

Die folgende Beschreibung ist (theoretisch) ignorieren für Controller für alles, was mit einem Blick "." drin.

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

Haben Sie noch:

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

... in Ihrem Global.asax.cs?

MVC legt es standardmäßig dort, und es soll damit umgehen.

Wenn Sie das tun, dann kann das Problem sein, wie Sie MVC und WebForms mischen.

+2

Und stellen Sie sicher, dass es an der Spitze ist! – Martin

+0

Ich habe es ... aber es ist unter 'routes.IgnoreRoute (" {Ressource} .aspx/{* pathInfo} ");' Ist das ein Problem? –

+0

Sollte kein Problem sein. –

6

Dieser Fehler kann auch auftreten, wenn Sie in einer Ansicht in Ihrer Umgebung den Helper Html.Action verwenden. Dieser Helfer wird den Bereich immer als Vorgriff verwenden, es sei denn, Sie weisen ausdrücklich darauf hin. Z. B.

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

Ihre Antwort löste ein anderes Problem im Zusammenhang mit @ Html.Action – irfandar

15

Die Route oben angegebenen ignorieren nicht für mich arbeiten, aber ich fand ein ähnliches, das tat:

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

ich diesen Fehler aufgetreten ist, wenn ich Ressourcen anfordern, die nicht existierten.

Insbesondere war ich eine benutzerdefinierte IE CSS-Datei anfordert:

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

(Dies sind condition comments, interpretiert von IE)

bestanden jedoch die tatsächliche Ressource auf ~/Inhalt/ie/ie7.css.

Also, ohne irgendwelche Änderungen am Routing wurde der Fehler mit der richtigen URL der Ressource gelöst.

+1

Aus Neugier, warum mit den Bedingung Kommentare kümmern, wenn Sie Browser-Version in einem Server-Seite @ Block erkennen und nur nicht die zusätzlichen Stile überhaupt rendern? – mikeschuld

+0

Nun, eigentlich habe ich mich nie darum gekümmert. Das CSS und der Großteil des Aufschlags waren die Arbeit eines Teamkollegen. Ich nehme an, es ist nur ein Ergebnis des Wunsches eines Frontdesigners, alles unter Kontrolle zu halten. Ausgelöst durch Ihre Bemerkung, lese ich gerade auf [MSDN - Über bedingte Kommentare] (https://msdn.microsoft.com/en-us/library/ms537512%28v=vs.85%29.aspx), dass die Unterstützung gelöscht wurde Im IE10-Standardmodus müssen wir uns darum kümmern. –

Verwandte Themen