2012-10-08 7 views
5

Mögliche Duplizieren:
How to programmatically clear outputcache for controller action methodWie Cache in angegebenen Controller in asp mvc löschen?

Wie Cache in bestimmten Controller löschen?

Ich versuche, mehrere Ansätze zu verwenden:

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

Es gibt keine keine Wirkung, es funktioniert nicht. :( Vielleicht besteht eine Möglichkeit, alle Schlüssel in Controller-Cache zu bekommen und entfernen sie explizit? Und in der überschriebene Methode soll ich klar Cache durchführen? Und wie das zu tun?

Ideen Does?

+0

Dieser Ansatz funktioniert nicht :( – testCoder

Antwort

5

versuchen Sie dies:

Setzen Sie dieses auf Ihrem Modell:

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

und auf Ihre speziellen Controller: zB:

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

Quelle: original code

+1

Das funktioniert aber nicht sofort, müssen warten, wenn letzte Cache ablaufen – testCoder

8

Haben Sie

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

} 

Wenn dies nicht tut es für Sie dann ein benutzerdefiniertes Attribut wie Mark Yu vermuten lässt.

+0

Das ist für mich gearbeitet in meinem Szenario .... Vielen Dank.. –

2

Try this:

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