ASP.NET MVC non utilizzare controller per percorso file esplicito in IIS7
-
23-09-2019 - |
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)?
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"/>