2010-04-21 10 views
6

Se ho una richiesta di una risorsa nell'app Web ASP.NET MVC1 (o 2) per una risorsa statica, diciamo ... un immagine o un file javascript o un file css ... il framework .NET prova a vedere se la richiesta corrisponde all'elenco delle rotte ... e alla fine non riesce a trovare un controller per questo?Routing di ASP.NET MVC e dati statici (ad esempio immagini, script, ecc.)

es.

risorse: /Content/Images/Foo.png

Questo richiesta passare attraverso la mia lista percorso .. non riesce a soddisfare qualsiasi controller/azioni a questa richiesta e quindi tentare direttamente quel percorso?

risposta

7

È possibile scegliere se mappare un file esistente o meno l'impostazione della proprietà RouteCollection.RouteExistingFiles

Ottiene o imposta un valore che indica se la ASP.NET dovrebbe gestire il routing URL che corrispondono un file esistente.

Ecco quello che ho letto da here:

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 caso affermativo, il routing ignora la richiesta (ignorando tutte le voci di percorso che potrebbero corrispondere all'URL) in modo che il file venga pubblicato direttamente. Questo è molto conveniente per file statici, come immagini, CSS e file JavaScript. Puoi tenerli nel tuo progetto (ad es. Nelle tue cartelle/Content o/Script), quindi fare riferimento e servirli direttamente, proprio come se non stessi usando il routing. Poiché il file esiste effettivamente su disco, ciò ha la priorità sulla configurazione del routing.

Se, invece, si desidera che la configurazione del routing abbia la priorità sui file su disco, è possibile impostare la proprietà RouteExistingFiles di RouteCollection su true. (Di default è falso.)

+0

quindi quello che stai dicendo è che, prima cerca di trovare il file sul disco (ad esempio foo.png, something.js, some.ico, qualunque cosa). Se non riesce a farlo, quindi prende a calci nel sistema di routing. Quindi, quando entra nel mio IControllerFactory (per esempio), si presume che la risorsa non esista fisicamente sul disco. Infine, questo è per il set di configurazione di default (es. RouteExistingFiles = false). –

+0

Sì, è corretto –

0

È anche possibile eseguire un piccolo trucco in IIS. Memorizzo js, ​​immagini, css ecc nella cartella Contenuto sotto la directory virtuale.

Se si visualizzano le proprietà (in Gestione IIS) della cartella Contenuto, crearlo come directory virtuale, quindi rimuovere il mapping di caratteri jolly. Quindi reimpostare la cartella Contenuto in una directory normale. Questo dovrebbe quindi interrompere le richieste a questi file gestiti dal gestore di aspnet_isapi.

1

Per impostazione predefinita, il motore di routing ignorerà le mappe di percorso per tutti i file che esistono fisicamente sul server. In breve, non è necessario fare nulla per un'app MVC per il collegamento a file statici.

Problemi correlati