174 votos

Deshabilitar la caché del navegador para toda la ASP.Net sitio web

Estoy buscando un método para desactivar la Caché del Navegador para toda la ASP.Net MVC sitio Web

He encontrado el siguiente método,

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();

y también de la etiqueta meta de método, ( no trabajo para mí , ya que algunos MVC Acciones enviar parcial html/json a través de ajax, sin cabeza,meta tag )

<meta http-equiv="PRAGMA" content="NO-CACHE">

Pero estoy buscando un método sencillo, para desactivar la caché del navegador para que todo el sitio web.

346voto

JKG Puntos 3701

Crear una clase que hereda de IActionFilter.

public class NoCacheAttribute : 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);
    }
}

A continuación, poner los atributos donde se necesita...

[NoCache]
[HandleError]
public class AccountController : Controller
{
    [NoCache]
    [Authorize]
    public ActionResult ChangePassword()
    {
        return View();
    }
}

125voto

Adam Tuliper - MSFT Puntos 22478

Estoy un poco tarde para la respuesta, pero aquí, en lugar de un rollo de su propia, simplemente uso lo que es para ti. Como se mencionó anteriormente, no deshabilitar el almacenamiento en caché para todo. Por ejemplo, secuencias de comandos jQuery utiliza mucho en mvc debe ser almacenado en caché. De hecho, idealmente, usted debe utilizar un CDN para aquellos que de todos modos - pero mi punto es, que algunos de los contenidos que deben ser almacenados en caché.

Lo que me parece que funciona mejor aquí, en lugar de esparcir [OutputCache] en todas partes es el uso de una clase:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController  : Controller
{
}

Todos tus controladores desea deshabilitar el almacenamiento en caché para luego heredar de este controlador.

Si usted necesita para reemplazar los valores predeterminados en la NoCacheController clase basta con especificar la configuración de la caché en su método de acción y la configuración de su método de Acción tendrá prioridad.

[HttpGet]
[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ViewResult Index()
{
  ...
}

75voto

Paul Puntos 1341
HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();

Todas las solicitudes se enruta a través de la default.aspx primera - así que suponiendo que usted puede simplemente pop en el código detrás de allí.

10voto

Edward Brey Puntos 8771

Puede que desee deshabilitar el almacenamiento en caché del navegador para todas las páginas prestados por los controladores (es decir. Páginas HTML), pero mantener el almacenamiento en caché en lugar de los recursos, tales como scripts, hojas de estilo e imágenes. Si estás usando MVC4+ agrupación y minificación, usted querrá mantener el valor predeterminado de la caché de la duración de scripts y hojas de estilo (muy larga duración, desde la memoria caché recibe invalidado basa en un cambio a una única URL, no se basa en el tiempo).

En MVC4+, para deshabilitar el almacenamiento en caché del navegador a través de todos los controladores, pero que la mantenga para nada no sirve por un controlador, agregar esto a FilterConfig.RegisterGlobalFilters:

filters.Add(new DisableCache());

Definir DisableCache como sigue:

class DisableCache : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}

3voto

Carlos Martinez Puntos 3151

Sé que esta respuesta no es del 100% relacionado con la pregunta, pero podría ayudar a alguien.

Si desea deshabilitar la Caché del Navegador de la totalidad de la ASP.Net MVC sitio Web , pero sólo desea hacer esto de forma TEMPORAL, entonces es mejor desactivar la memoria caché de su navegador.

Here's a screenshot in Chrome

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: