2012-10-08 66 views
5

Duplicar posible:
How to programmatically clear outputcache for controller action method¿Cómo borrar la memoria caché en el controlador especificado en asp mvc?

cómo borrar la memoria caché en el controlador especificado?

intento utilizar varios enfoques:

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

No hay ningún efecto, no funciona. :( Puede ser existe alguna manera de obtener todas las claves en caché del controlador y quitar que de manera explícita? Y en el que método reemplazado i debe realizar caché claro? Y cómo hacerlo?

¿Hay alguna idea?

+0

Este enfoque no funciona :( – testCoder

Respuesta

5

intente esto:

poner esto en su modelo:

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); 
    } 
} 

y en su controlador específico: por ejemplo:

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

fuente: original code

+1

que funciona pero no inmediatamente, tiene que esperar cuando última caché caduque – testCoder

8

Ha intentado

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

} 

Si esto no lo haga por usted a continuación, un atributo personalizado como Mark Yu sugiere.

+0

Esto funcionó para mí en mi escenario .... Muchas gracias.. –

2

Prueba esto:

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]); 
    } 
} 
Cuestiones relacionadas