2011-03-31 13 views
13

He estado buscando información sobre cómo deshabilitar el almacenamiento en caché del lado del cliente en el nivel de proyecto . Sé que puedo añadir lo siguiente antes de un método de acción:Deshabilitar el almacenamiento en caché del lado del cliente

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

También leí algo sobre la fabricación de perfiles de almacenamiento en caché, pero eso también significaría refiriéndose a ellos en varios lugares. Me gustaría una configuración única en web.config, o tal vez en IIS?

El proyecto que estoy trabajando contiene una gran cantidad de puntos de vista parciales

Gracias de antemano por cualquier consejo en esta materia.

Respuesta

0

Se pueden definir perfiles de memoria caché en web.config, sin embargo, el uso de perfiles de memoria caché no parece trabajar con OutputCache atributo en MVC 3. Lea esta pregunta: Caching ChildActions using cache profiles won't work?

+0

"no parece funcionar" suena un poco duro. Parece que no es totalmente compatible con las acciones de los niños. – bzlm

+0

@bzlm ¿cuál es la diferencia? no puede usarse para acciones infantiles. – frennky

+0

Incluso si elimina todo el contenido, excepto 'Duración' y' VaryByParam' del perfil. – bzlm

4

Se podría hacer BaseController y establecer su perfil de caché a ella . Luego haga que todos sus controladores hereden de este BaseController.


Actualización:

Aquí es lo que he:

// Here is my custom OutputCaheAttribute to prevent cache at all. 
//Whatever you may put anything you want. 
//Of course i don't use it here but i put it to show you how it's going. 
[NoCache] 
public class BaseController : Controller 
{ 
    protected override ViewResult View(string viewName, string masterName, object model) 
    { 
     // I do some stuffs here to change MasterPage depending on current culture. 
     // Don't care about it i just wanna show you why BaseController is good idea. 
    } 
} 

Entonces TODAS mis controladores hereda de esta BaseController en lugar de lo normal Controller.

la esperanza que esto era útil ;)

+0

Gracias por el comentario Wahid! Pero, ¿no estoy obligado a establecer un atributo OutputCache para cada resultado de acción? ¿O puedo hacerlo en el nivel de clase de alguna manera? – burktelefon

+0

Sí, puede hacer esto en el controlador, entonces todas las acciones en este controlador tendrán la misma configuración de caché. –

0

El atributo OutputCache se utiliza para el lado del servidor caché de resultados acción de salida. Para desactivarlo, simplemente no aplica el atributo a la acción/controlador. Si desea deshabilitar el lado del cliente, entonces eso se soluciona agregando un encabezado informando al navegador que no almacene en caché el resultado.

26

Puede deshabilitar el almacenamiento en caché del navegador a través de Web.Config:

<configuration> 
    <system.webServer> 
     <httpProtocol> 
      <customHeaders> 
       <add name="Cache-Control" value="no-cache, no-store" /> 
       <add name="Pragma" value="no-cache" /> 
       <add name="Expires" value="-1" /> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</configuration> 

Fuente: http://blog.jamesjones.name/2009/11/how-to-disable-browser-caching-in.html

Editar: se ha añadido no-store-Cache-Control para Chrome (http://code.google.com/p/chromium/issues/detail?id=28035)

Puede configurar esto en el proyecto nivel o en el nivel de subdirectorio para controlar el almacenamiento en caché del navegador como se desee. Por ejemplo, en un sitio principalmente basado en datos/dinámico, puedo establecer estos encabezados a nivel del proyecto, pero en un directorio/static (que contiene mis .js, .css, images), agregue otro web.config que incluya el la directiva apropiada </clear>, y tal vez establecer un encabezado futuro lejano expira en su lugar.

0

probar este

[OutputCache (NoStore = true, Duración = 0, VaryByParam = "Ninguno")]

Cuestiones relacionadas