Domanda

Si consideri uno StaticResourceController che individua e serve file.

Ho creato un percorso esplicito per "favicon.ico" che gestirà la richiesta di questo file usando StaticResourceController:

routes.MapRoute(
        "favicon",
        "favicon.ico",
        new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
        new[] { "Dimebrain.Mvc.Controllers" }
        );

In IIS6 il risultato atteso si verifica quando si effettua una richiesta di http: // localhost: 8080 / favicon.ico .

Purtroppo quando schiero a IIS7 http: //localhost/favicon.ico restituisce un IIS generati 404 , presumibilmente perché in realtà è alla ricerca per la favicon.ico nella cartella principale web, dove non esiste.

Ho abbastanza happening in StaticResourceController che questa non è una buona cosa per mia domanda, soprattutto perché è multi-tenant e il file favicon.ico può cambiare. Ho impostato il mio moduli server web per gestire ogni richiesta e sovrascrivere il RouteCollection di ignorare i controlli di file con RouteExistingFiles.

Perché l'UrlRoutingModule sempre a modo mio in IIS7 e costringendo servire il file statico dal disco (404)?

È stato utile?

Soluzione

Nel caso in cui nessun altro corre in questo problema, la soluzione è necessario che lasci MVC sapere di non elaborare richieste in cartelle in cui i file statici Live:

// Make sure MVC is handling every request for static files
routes.RouteExistingFiles = true;

// Don't process routes where actual static resources live
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("areas/admin/content/{*pathInfo}");
routes.IgnoreRoute("areas/admin/scripts/{*pathInfo}");

Altri suggerimenti

In adiition alla risposta di Daniel Crenna, è necessario aggiungere nel file di web.confug nella sezione system.webServer:

<modules runAllManagedModulesForAllRequests="true"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top