2012-10-08 12 views
5

Eventuali duplicati:
How to programmatically clear outputcache for controller action methodCome svuotare la cache nel controller specificato in asp mvc?

come svuotare la cache nel controller specificato?

cerco di utilizzare diversi approcci:

Response.RemoveOutputCacheItem(); 
Response.Cache.SetExpires(DateTime.Now); 

Non c'è alcun effetto, esso non funziona. :( Può essere esiste alcun modo per ottenere tutte le chiavi nella cache del controller e togliere loro in modo esplicito? E in quale metodo override dovrei eseguire la cache chiaro? E come farlo?

Does tutte le idee?

+0

Questo approccio non funziona :( – testCoder

risposta

5

provare questo:

messo sul vostro modello:

public class NoCache : ActionFilterAttribute 
{ 
    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); 
    } 
} 

e sul controller specifico: esempio:

[NoCache] 
[Authorize] 
public ActionResult Home() 
{ 
    ////////... 
} 

fonte: original code

+1

che funziona ma non immediatamente, hanno bisogno di aspettare l'ultima volta che la cache scada – testCoder

8

Hai provato

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public ActionResult DontCacheMeIfYouCan() 
{ 

} 

Se questa non lo fa per voi allora un attributo personalizzato come suggerisce Mark Yu.

+0

Questo ha funzionato per me nel mio scenario .... Grazie mille.. –

2

Prova questa:

public void ClearApplicationCache() 
{ 
    List<string> keys = new List<string>(); 

    // retrieve application Cache enumerator 
    IDictionaryEnumerator enumerator = Cache.GetEnumerator(); 

    // copy all keys that currently exist in Cache 
    while (enumerator.MoveNext()) 
    { 
     keys.Add(enumerator.Key.ToString()); 
    } 

    // delete every key from cache 
    for (int i = 0; i < keys.Count; i++) 
    { 
     Cache.Remove(keys[i]); 
    } 
} 
Problemi correlati