ASP.NET MVC come disabilitare l’opzione di caching automatico?

Come disabilitare il caching automatico del browser dall’applicazione asp.Net mvc?

Perché sto avendo un problema con il caching in quanto memorizza nella cache tutti i link. Ma a volte viene reindirizzato automaticamente alla PAGINA INDICE PREDEFINITO che ha memorizzato la memorizzazione nella cache e quindi per tutto il tempo in cui clicco a quel collegamento, verrà reindirizzato alla PAGINA INDICE PREDEFINITO.

Quindi qualcuno sa come disabilitare manualmente l’opzione di caching da ASP.NET MVC 4?

È ansible utilizzare OutputCacheAttribute per controllare il server e / o il caching del browser per azioni specifiche o tutte le azioni in un controller.

Disabilita per tutte le azioni in un controller

 [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will be applied to all actions in MyController, unless those actions override with their own decoration public class MyController : Controller { // ... } 

Distriggers per un’azione specifica:

 public class MyController : Controller { [OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] // will disable caching for Index only public ActionResult Index() { return View(); } } 

Se si desidera applicare una strategia di memorizzazione nella cache predefinita a tutte le azioni in tutti i controller, è ansible aggiungere un filtro di azione globale modificando il proprio global.asax.cs e cercando il metodo RegisterGlobalFilters . Questo metodo viene aggiunto nel modello di progetto dell’applicazione MVC predefinito.

 public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new OutputCacheAttribute { VaryByParam = "*", Duration = 0, NoStore = true, }); // the rest of your global filters here } 

Questo farà sì che applichi l’ OutputCacheAttribute specificato sopra ad ogni azione, che disabiliterà il caching del server e del browser. Dovresti comunque essere in grado di ignorare questa no-cache aggiungendo OutputCacheAttribute a azioni e controller specifici.

HackedByChinese manca il punto. Ha scambiato la cache del server con la cache del client. OutputCacheAttribute controlla la cache del server (cache http.sys di IIS), non la cache dei browser (client).

Ti do una parte molto piccola della mia base di codice. Usalo saggiamente.

 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public sealed class NoCacheAttribute : FilterAttribute, IResultFilter { public void OnResultExecuting(ResultExecutingContext filterContext) { } public void OnResultExecuted(ResultExecutedContext filterContext) { var cache = filterContext.HttpContext.Response.Cache; cache.SetCacheability(HttpCacheability.NoCache); cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches); cache.SetExpires(DateTime.Now.AddYears(-5)); cache.AppendCacheExtension("private"); cache.AppendCacheExtension("no-cache=Set-Cookie"); cache.SetProxyMaxAge(TimeSpan.Zero); } } 

Uso:

 /// will be applied to all actions in MyController [NoCache] public class MyController : Controller { // ... } 

Usalo saggiamente poiché disabilita realmente tutta la cache del client. L’unica cache non disabilitata è la cache del browser “back button”. Ma sembra che non ci sia davvero modo di aggirarlo. Forse solo usando javascript per rilevarlo e forzare l’aggiornamento delle pagine o delle pagine.

Possiamo impostare il profilo della cache nel file Web.config invece di impostare i valori della cache singolarmente nelle pagine per evitare codice ridondante. Possiamo fare riferimento al profilo utilizzando la proprietà CacheProfile dell’attributo OutputCache. Questo profilo di cache verrà applicato a tutte le pagine a meno che la pagina / il metodo non prevalga su queste impostazioni.

          

E se vuoi disabilitare la memorizzazione nella cache dalla tua particolare azione o controller, puoi sovrascrivere le impostazioni della cache di configurazione decorando quel metodo di azione specifico come mostrato di seguito:

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] public ActionResult NoCachingRequired() { return PartialView("abcd"); } 

Spero che questo sia chiaro e ti sia utile.

Se si desidera impedire la memorizzazione nella cache del browser, è ansible utilizzare questo codice da ShareFunction

 public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); filterContext.HttpContext.Response.Cache.SetNoStore(); base.OnResultExecuting(filterContext); } 

Per la soluzione su pagina, impostalo nella pagina di layout: