ASP.NET MVC di routing e di dati statici (es. Immagini, script, ecc)
-
30-09-2019 - |
Domanda
Se ho una richiesta di una risorsa nel mio ASP.NET MVC1 (o 2) web app per una risorsa statica, diciamo ... un un file JavaScript o un file di immagine o css ... fa il framework .NET provare e vedere se la richiesta corrisponde all'elenco percorso ... e alla fine non riesce a trovare un controller per questo?
ad es.
Resource: /Content/Images/Foo.png
Questo richiesta go attraverso la mia lista percorso .. non riesce a soddisfare qualsiasi controller / azioni a questa richiesta e quindi tentare questa strada direttamente?
Soluzione
E 'possibile scegliere se mappare un file esistente o meno l'impostazione della RouteCollection.RouteExistingFiles
Proprietà
Ottiene o imposta un valore che indica se ASP.NET di routing dovrebbe gestire URL che corrispondono a un file esistente.
Ecco quello che ho letto da qui :
Tuttavia, il sistema di routing fa ancora controllare il file system per vedere se un URL in ingresso avviene per abbinare un file o un disco, e in tal caso, il routing ignora la richiesta (bypassando tutte le voci di percorso che l'URL potrebbe anche match) in modo che il file verrà servita direttamente. Questo è molto comodo per i file statici, come immagini, CSS e file JavaScript. Puoi tenerli nel progetto (ad esempio, nel vostro / Contenuto o / cartelle Script), e quindi di riferimento e servirli direttamente, proprio come se si stesse utilizzando il routing non a tutti. Dal momento che il file esiste davvero su disco, che ha la priorità rispetto alla configurazione di routing.
Se, invece, si vuole la configurazione di routing a prendere la priorità su file su disco, è possibile impostare della RouteCollection proprietà RouteExistingFiles su true. (E 'falso per impostazione predefinita.)
Altri suggerimenti
Per impostazione predefinita il motore di routing ignorerà percorso le mappe per tutti i file che esistono fisicamente sul server. In breve, è necessario fare nulla per un'applicazione MVC creare un collegamento a file statici.
Si può anche fare un piccolo trucco in IIS. Devo conservare il mio js, ??css, immagini ecc nella cartella Contenuto sotto la directory virtuale.
Se quindi visualizzare le proprietà (in Gestione IIS) della cartella contenuti, creare come una directory virtuale, quindi rimuovere il mapping jolly. Quindi impostare la parte posteriore cartella Contenuto in una directory normale. Questo dovrebbe quindi interrompere le richieste a questi file affidate dal gestore aspnet_isapi.