2009-02-22 13 views
22

La cartella Contenuto è speciale per il framework sottostante di MVC? Non riesco a trovare alcun riferimento ad esso nel codice di routing o configurazione.La cartella Contenuto è sacra in asp.net mvc?

Mi chiedo solo se il contenuto statico può essere gestito in modi diversi.

In una nota correlata, contenuto dello script e css di StackOverflow sembra essere recuperato dal numero di versione nel querystring:

<link href="/Content/all.min.css?v=2516" rel="stylesheet" type="text/css" /> 

cura di speculare come questo potrebbe funzionare e perché questo sarebbe importante?

+0

@BC, ho chiesto la stessa domanda perché ero curioso anche io. Informazioni sui file CSS che sono. Controlla: http://stackoverflow.com/questions/502600/versioning-css-files-with-a-query-string-like-stackoverflow-does – mmcdole

risposta

18

Nessuna magia, la classe System.Web.Routing.RouteCollection ha una proprietà RouteExistingFiles che controlla il comportamento.

Il valore predefinito è falso, il che significa che il routing ASP non deve instradare l'URL, ma solo restituire il contenuto predefinito. In questo caso "/Content/all.min.css?v=251" ignora interamente le regole di routing MVC.

se si desidera aggiungere una regola di instradamento per la cartella del contenuto, è necessario aggiungere la regola e impostare RouteExistingFiles su true.

4

Uso la stessa tecnica su alcuni dei miei siti. Lo uso per evitare il caching - se non si specifica un URL diverso per le diverse build, i client potrebbero aver memorizzato nella cache quello vecchio.

+0

Buona osservazione, so che deve essere il ragionamento. –

+2

Io uso mysite.css? V = xx tutto il tempo - enorme dolore nel culo altrimenti dire al cliente di svuotare la cache o aggiornare l'aggiornamento – Slee

+0

È il ragionamento, Jeff Atwood lo ha detto anche lui stesso durante un podcast SO. –

1

Non ha alcun significato speciale. È solo un nome arbitrato. Se si utilizza la procedura guidata di ASP.NET MVC RC troverete che viene fatto riferimento all'interno della vostra pagina master (Site.master):

<link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 

Per quanto riguarda all.min.css utilizzato in SO, potrebbe essere un gestore personalizzato che viene eseguito sul server per recuperare un foglio di stile compresso per versione.

+0

Quindi stai dicendo che il gestore del routing cerca prima i nomi effettivi delle cartelle fisiche prima di scegliere un controller da indirizzare? I miei test sembrano indicare che potrebbe essere ciò che sta accadendo. –

5

No, la cartella Contenuto non è sacra. Usalo come preferisci.

Re la versione - questo è un trucco comune per aiutare con il controllo delle versioni se si dispone di cache basata su http-header abilitato; in caso contrario, non è possibile garantire che tutti i client utilizzino i file aggiornati. Vedrete un sacco di "foo_v4.js" ecc sul web ;-p

+0

Ciao.Ho una [domanda in SO] (http://stackoverflow.com/questions/30273517/best-practice-for-persisting-user-state-in-special-kind-of-asp-net-mvc-applicati). Potresti aiutarmi, perché è molto urgente. E sarò davvero utile per il tuo aiuto. –

3

Giusto per aggiungere agli altri commenti su questo - il modo in cui il sistema di routing funziona è la seguente:

arriva una richiesta in, e viene indirizzato al motore di routing, che quindi esamina la tabella del percorso per una corrispondenza, nell'ordine in cui sono registrati (ecco perché è necessario inserire percorsi più specifici prima di percorsi più generali).

Se non viene trovata alcuna corrispondenza, il motore di routing inoltra la richiesta a IIS per gestirlo normalmente - questo è anche il modo in cui è possibile combinare Webform ASP.NET e MVC nella stessa applicazione.

+0

Ma Content/query non corrispondono alla mia route predefinita? –

+2

No, perché non hai un controller chiamato ContentController perché corrisponda. –

Problemi correlati