Cache de sortie d'expiration ASP.Net MVC

j'utilise la balise standard outputcache dans mon application MVC qui fonctionne très bien mais je dois la forcer à être jetée à certains moments. Comment puis-je y parvenir? La page qui est mise en cache est construite à partir d'une route très simple {Controller}/{PageName} - donc la plupart des pages sont quelque chose comme ceci: / Pages / About-Us

Voici la balise de cache de sortie qui est en haut de my .aspx afficher la page juste pour être clair:

<@ OutputCache Duration="100" VaryByParam="None" %>

ainsi dans une autre action sur le même contrôleur où le contenu est mis à jour j'ai besoin de vider ce cache, ou même tout - c'est une très petite application donc pas une grosse affaire pour vider tous les éléments mis en cache.

14
demandé sur Kevin Hakanson 2008-12-18 06:40:29

4 réponses

méfiez-vous de l'utilisation de "None" vs. "".

  • Si vous envoyez "" alors le HttpHeader pour Varier est pas envoyé.
  • si vous envoyez" None "alors le HttpHeader pour Vary est envoyé.

j'ai utilisé Fiddler pour vérifier ce comportement.

Cela semble avoir un impact sur l'opportunité ou non le navigateur va vers le serveur pour vérifier la dernière version (provoquant une 304). Au moins dans Chrome, il le fait. Vous souhaitez utiliser Varies="" si vous savez que vous n'allez pas vouloir mettre à jour le fichier avant qu'il n'ait expiré.

je recommande d'utiliser Varies="" comme je l'ai fait dans ce post . Pour mon fichier javascript, Je ne veux pas que le navigateur revienne en arrière et faire une autre demande Http jusqu'à ce qu'il ait expiré. 304 est inutile.

16
répondu Simon_Weaver 2017-05-23 10:29:36

HttpResponse.RemoveOutputCacheItem() est probablement la méthode que vous souhaitez utiliser. Si vous pouvez trouver sous quel nom les actions sont mises en cache, vous pouvez supprimer juste l'action spécifique (essayez de définir un point de rupture ou de jeter tous les noms des éléments mis en cache à l'écran)

sinon, j'itérerai tout le cache de sortie et je nettoierai chaque élément.

14
répondu Zachary Yates 2012-08-28 02:49:41

ne connaissant pas la différence entre "Aucun" et ""pour le VaryByParam, j'utilisais cet attribut:

[OutputCache(Location=OutputCacheLocation.ServerAndClient, Duration=int.MaxValue, VaryByParam="none")]

et ce code pour "corriger" le Vary: * problème:

this.Response.Cache.SetOmitVaryStar(true);

que j'ai trouvé référencé à ASP.NET les tests de mise en cache trouvent un bug avec VaryByParam

la différence entre un OutputCache directive "Client" et "ServerAndClient" est que "ServerAndClient" champ. Cela a un impact sur IE en ce QU'IE envoie des requêtes malgré tout. L'utilisation de l'varier:* en-tête peut désactiver tous les clients de la mise en cache ( http://msdn2.microsoft.com/en-us/library/system.web.httpcachepolicy.setomitvarystar.aspx ).

la seule façon de supprimer l'en-tête vary:* et donc d'autoriser la mise en cache client était par le code:

6
répondu Kevin Hakanson 2010-08-13 22:25:27

il semble que le cache de sortie ne mette rien dans HttpContent.Cache parce que quand je boucle à travers elle la collection est vide:

For Each elem As DictionaryEntry In HttpContext.Cache
  HttpContext.Cache.Remove(elem.Key)
Next

Voici mon attribut action:

<OutputCache(Duration:=600, VaryByParam:="pagename")> _
Function Index(ByVal pagename As String) As ActionResult
1
répondu Slee 2008-12-18 04:19:55