8

Ho appena spostato i miei file di risorse (javascript, css, immagini) dalla cartella Content alla cartella personalizzata Assets. E ho notato uno strano comportamento - questi file non sono più memorizzata nella cache dal browser e MvcMiniProfiler mostra richiesta separata per ogni risorsa che si trova nella cartella Assets:E ancora, qual è la magia della cartella ASP.NET MVC Content?

Before moving to Assets folder and after

So che la cartella Content non è richiesto da ASP Convenzione MVC .NET, ma perché questo accade? Lo Content viene trattato in qualche modo soprattutto da chiunque (ad esempio ASP.NET, IISExpress, ecc.)? E come forzare il caching per altre cartelle che contengono risorse statiche?

EDIT: Oh, sembra non essere un comportamento dispari ASP.NET MVC, ma solo il comportamento standard di MvcMiniProfiler. Attualmente sto controllando che ...

EDIT: Sì, non c'è nessun problema con ASP.NET MVC, è solo un default configuration di MvcMiniProfiler ignorare solo questi percorsi: "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico". E queste impostazioni predefinite possono essere facilmente estesi:

MiniProfiler.Settings.IgnoredPaths = MiniProfiler.Settings.IgnoredPaths 
    .Concat(new [] { "/assets/" }) 
    .ToArray(); 

a volte è una buona idea di leggere la documentazione prima di utilizzare qualcosa;)

+1

Domanda simile - [C# Mini MVC profiler: sembra che mostri i tempi di profilo per ogni risorsa statica!] (Http://stackoverflow.com/questions/6648249/c-sharp-mini-mvc-profiler-appears-to -be-display-profile-times-for-every-stat) –

risposta

4

Come si sta indicando nel vostro aggiornamento, questo sembra essere una caratteristica di MvcMiniProfiler:

/// <summary> 
/// When <see cref="MiniProfiler.Start"/> is called, if the current request url contains any items in this property, 
/// no profiler will be instantiated and no results will be displayed. 
/// Default value is { "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico" }. 
/// </summary> 
[DefaultValue(new string[] { "/mini-profiler-", "/content/", "/scripts/", "/favicon.ico" })] 
public static string[] IgnoredPaths { get; set; } 

Source.

Presumibilmente, le immagini non sono mai state memorizzate nella cache quando le stavi servendo tramite Cassini, perché Cassini è terribile in questo (passando i file png come application/octet-stream, ad esempio), ma il problema è stato nascosto manualmente dalla tua vista MvcMiniProfiler.

+0

Grazie, avevamo ragione :)! Ho trovato la risposta nello stesso file, ma mi chiedevo se questa funzione è stata documentata da qualche parte, e non ho trovato alcuna documentazione o post di blog, solo il codice sorgente. –

4

Questo è un comportamento strano. Tuttavia, inserire il seguente codice all'interno del file web.config che si trova sotto la radice della vostra applicazione:

<system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" /> 
    </staticContent> 
    </system.webServer> 

Questo codice aggiunge le intestazioni di risposta necessarie per il caching del browser per funzionare. È possibile modificare l'ora, ovviamente. Per maggiori informazioni consultare: http://www.iis.net/ConfigReference/system.webServer/staticContent/clientCache

+0

Sì, grazie, funziona sicuramente. –