Estoy buscando un método para deshabilitar la memoria caché del navegador para todo un sitio web ASP.NET MVC
Encontré el siguiente método:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Y también un método de metaetiqueta (no funcionará para mí, ya que algunas acciones de MVC envían HTML / JSON parcial a través de Ajax, sin una metaetiqueta de cabecera).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Pero estoy buscando un método simple para deshabilitar la memoria caché del navegador para todo un sitio web.
asp.net
asp.net-mvc
caching
browser-cache
Palani
fuente
fuente
Respuestas:
Todas las solicitudes se enrutan a través de default.aspx primero, por lo que suponiendo que pueda ingresar el código detrás de allí.
fuente
Cree una clase que herede de IActionFilter.
Luego ponga atributos donde sea necesario ...
fuente
if (filterContext.IsChildAction) return;
en la parte superior; esto evitará que la acción externa no se almacene en caché si llama a una acción secundaria que está decorada con unNoCache
atributo. En otras palabras, elNoCache
atributo no se filtrará a otras acciones si ejecutan acciones secundarias. Además, el nombre de la clase debeNoCacheAttribute
cumplir con la convención de nomenclatura generalmente aceptada para los atributos.En lugar de rodar el suyo, simplemente use lo que se le proporciona.
Como se mencionó anteriormente, no deshabilite el almacenamiento en caché para todo. Por ejemplo, los scripts jQuery que se usan mucho en ASP.NET MVC deben almacenarse en caché. En realidad, idealmente debería usar un CDN para esos de todos modos, pero mi punto es que algún contenido debe almacenarse en caché.
Lo que encuentro funciona mejor aquí en lugar de rociar el [OutputCache] en todas partes es usar una clase:
Todos los controladores para los que desea deshabilitar el almacenamiento en caché heredan de este controlador.
Si necesita anular los valores predeterminados en la clase NoCacheController, simplemente especifique la configuración de caché en su método de acción y la configuración en su método de Acción tendrá prioridad.
fuente
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
a nivel de clase, no puede tener PartialViews en su clase.Es posible que desee deshabilitar el almacenamiento en caché del navegador para todas las páginas representadas por los controladores (es decir, páginas HTML), pero mantenga el almacenamiento en caché en su lugar para recursos como secuencias de comandos, hojas de estilo e imágenes . Si está utilizando la agrupación y minificación MVC4 +, querrá mantener las duraciones de caché predeterminadas para scripts y hojas de estilo (duraciones muy largas, ya que la caché se invalida en función de un cambio en una URL única, no en función del tiempo).
En MVC4 +, para deshabilitar el almacenamiento en caché del navegador en todos los controladores, pero retenerlo para cualquier cosa que no sea servida por un controlador, agregue esto a
FilterConfig.RegisterGlobalFilters
:Definir de la
DisableCache
siguiente manera:fuente
Sé que esta respuesta no está 100% relacionada con la pregunta, pero podría ayudar a alguien.
Si desea deshabilitar la memoria caché del navegador para todo el sitio web ASP.NET MVC , pero solo desea hacerlo TEMPORALMENTE, entonces es mejor deshabilitar la memoria caché en su navegador.
fuente
Implementé todas las respuestas anteriores y aún tenía una vista que no funcionaba correctamente.
Resultó que el nombre de la vista con la que estaba teniendo el problema se llamaba 'Reciente'. Aparentemente esto confundió el navegador Internet Explorer.
Después de cambiar el nombre de la vista (en el controlador) a un nombre diferente (elegí 'Reciente5'), las soluciones anteriores comenzaron a funcionar.
fuente
Puede probar el siguiente código en el archivo Global.asax.
fuente
UI
Antecedentes
fuente