2010-03-25 1 views
13

Ich habe einen Bildordner auf ~/Content/Bilder gespeichert/Controller-Pfad nicht für statische Bilder gefunden? asp.net mvc Routing-Problem?

ich diese Bilder über

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

Kürzlich laden, die Bilder nicht geladen werden, und ich bin die folgenden Fehler in meinem Fehler bekommen Log. Was seltsam ist, ist, dass einige Bilder laden, während andere nicht laden.

Wer hat eine Ahnung was mit meinen Routen nicht stimmt? Fehle ich eine Ignorierroute für den Ordner/Content /?

ich auch den gleichen Fehler für favicon.ico und ein paar andere Bilddateien ...

<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) 

Meine aktuellen Routen immer so aussehen:

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 
     ); 

Dank!

+0

Haben Sie jemals eine Lösung finden, die gleiche prob haben, wenn – Stefanvds

Antwort

5

Ich würde eine andere ignorierte Route sofort unter der ersten einfügen.

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

Veröffentlichung Ich werde dies versuchen ... aber die Das Problem tritt nur beim Staging auf (nicht bei dev), also wird es nicht bis zum tomm sein, das ich testen kann. – rksprst

+0

Hast du das ausprobiert? –

+0

Ja, immer noch der gleiche Fehler. – rksprst

0

Sie haben noch routes.RouteExistingFiles = true; irgendwo tun Sie?

+0

Nein, das habe ich nirgends. – rksprst

3

Wenn Sie sich Ihre Lösungs-Explorer-Ansicht ansehen, vermute ich, dass sich Ihr Inhaltsordner zusammen mit einem Ordner für Controller und Ansichten im Stammverzeichnis des Projekts befindet. Sie versuchen, Ihr Bild src modifizieren, wie unten gezeigt ...

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

Das würde für mich nicht funktionieren ... Ich muss den Root-Pfad (/ Content/Images) verwenden, da diese Bilder in CSS-Dateien referenziert werden, die in dev stehen und in der Produktion minimiert und kombiniert werden). Aber warum sollte das überhaupt helfen? – rksprst

+0

@rksprst: Ich hatte das gleiche Problem und löste es so. Gerade jetzt '/ Inhalt/Bilder/Bild.png 'sucht im Aktionsordner Ihrer Ansichten nach dem Bild ... Es zieht nicht aus dem' ~/Content/Images/'Ordner. – RSolberg

1

Sie benötigen weniger bestimmte Routen auf den Grund zu erklären:

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 = "" } 
); 

Aber ich glaube nicht, dass dies das Problem hier ist. Von der Ausnahme scheint es, dass der Web-Server, der diese Anwendung ausführt, eine Platzhalter-Zuordnung mit dem Filter aspnet_isapi hat, was bedeutet, dass alle Dateien der ASP.NET-Laufzeit zugeordnet werden, auch die statischen Dateien.

+0

Ja, Sie können diesen kleinen Trick in IIS tun, wo Sie zunächst den Inhalt-Ordner als ein virtuelles Verzeichnis fälschen, entfernen Sie die Platzhalter-Zuordnung, und entfernen Sie dann den Ordner Inhalt als ein virtuelles Verzeichnis. Dies sollte das Problem lösen. – David

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

oops, mit einer Frage beantwortet. -1 – ScottG

0

Die Ausnahme ... could not be found or it does not implement IController muss nicht fehlerhaft. Eigentlich nicht zu einem Controller auflösen, so bedeutet dies, dass das nächste Modul (oder ist es Handler?) Versuchen, die Anfrage zu behandeln. In gewisser Weise ist das eine "erwartete Ausnahme".

Das Problem ist, wenn diese Ausnahme protokolliert wird und die Protokolle verstopft. Wenn log4net verwenden, Hinzufügen des folgenden <filter> Element auf den Standard appender sollte draußen bleiben:

<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> 
Verwandte Themen