tag net mvc asp asp.net asp.net-mvc caching outputcache

tag - Caducar caché de salida ASP.Net MVC



outputcache mvc 5 (4)

Estoy usando la etiqueta estándar de caché de salida en mi aplicación MVC, que funciona muy bien, pero necesito forzarla a que sea descargada en determinados momentos. ¿Cómo logro esto? La página que se almacena en caché se crea a partir de una ruta muy simple {Controller} / {PageName}, por lo que la mayoría de las páginas son algo así: / Pages / About-Us

Aquí está la etiqueta de la memoria caché de salida que está en la parte superior de mi página de vista de .aspx solo para ser clara:

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

Entonces, en otra acción en el mismo controlador donde se actualiza el contenido, necesito volcar este caché, o incluso todo, es una aplicación muy pequeña, así que no es un gran problema deshacerse de todos los elementos en caché.


parece que el caché de salida no pone nada en HttpContent.Cache porque cuando lo recorro, la colección está vacía:

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

Aquí está mi atributo de acción:

<OutputCache(Duration:=600, VaryByParam:="pagename")> _ Function Index(ByVal pagename As String) As ActionResult


Sin saber la diferencia entre "Ninguno" y "" para VaryByParam, estaba usando este atributo:

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

Y este código para "arreglar" el problema Vary: * :

this.Response.Cache.SetOmitVaryStar(true);

Lo que encontré referenciado en las pruebas de caché ASP.NET encuentra un error con VaryByParam

La diferencia entre una directiva OutputCache establecida en "Cliente" y "ServerAndClient" es que "ServerAndClient" genera el campo Vary. Esto está afectando a IE en que IE está enviando solicitudes independientemente. El uso del encabezado vary: * puede deshabilitar el almacenamiento en memoria caché de todos los clientes ( http://msdn2.microsoft.com/en-us/library/system.web.httpcachepolicy.setomitvarystar.aspx ).

La única forma de eliminar el encabezado vary: * y así permitir el almacenamiento en caché del cliente era mediante código:


HttpResponse.RemoveOutputCacheItem() es probablemente el método que desea utilizar. Si puede averiguar en qué nombre están almacenadas las acciones, puede eliminar solo la acción específica (intente configurar un punto de interrupción o volcar todos los nombres de los elementos almacenados en la memoria caché)

De lo contrario, iteraría a través de la memoria caché de salida completa y simplemente borraría cada elemento.


Tenga cuidado al usar "Ninguno" frente a "".

  • Si envía "", entonces no se envía el HttpHeader for Vary .
  • Si envía "Ninguno", se envía el HttpHeader for Vary .

Usé Fiddler para verificar este comportamiento.

Esto parece tener un impacto en si el navegador regresa al servidor para verificar la última versión (lo que causa un 304). Al menos en Chrome lo hace. Desea utilizar Varies="" si está seguro de que no va a querer actualizar el archivo antes de que haya expirado.

Recomiendo usar Varies="" como lo hice en esta publicación . Para mi archivo javascript, no quiero que el navegador regrese y haga otra solicitud Http hasta que haya expirado. 304 es innecesario.