Usted puede poner esta lógica en un ActionFilter lo que significa que en lugar de añadir el código anterior para cada uno de sus métodos de acción en su controlador, sólo puede decorar el método de acción con su filtro personalizado. O si se aplica a todos los métodos de Acción en un Controlador, puede aplicar el atributo a todo el Controlador.
Su ActionFilter será algo como esto:
public class MyExpirePageActionFilterAttribute : System.Web.Mvc.ActionFilterAttribute
{
public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
filterContext.HttpContext.Response.Expires = -1;
filterContext.HttpContext.Response.Cache.SetNoServerCaching();
filterContext.HttpContext.Response.Cache.SetAllowResponseInBrowserHistory(false);
filterContext.HttpContext.Response.CacheControl = "no-cache";
filterContext.HttpContext.Response.Cache.SetNoStore();
}
}
Ver this artículo para más información.
Si usted quiere esto en todas las acciones de toda la aplicación, en realidad se puede aplicar un ActionFilter a todas las acciones utilizando un ActionFilter mundial establecido en el Global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalFilters.Filters.Add(new MyExpirePageActionFilterAttribute());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Sí, estoy de acuerdo en que necesito crear un ActionFilter. Y estaba en proceso de crear eso. Así que supongo que ese enfoque está validado en función de sus respuestas. Lo que quiero es una retroalimentación es qué va dentro del filtro theat. ¿Las 5 líneas que tengo tienen sentido o hay una mejor manera de hacerlo? Gracias. – kolhapuri
@kolhapuri Ya veo, mira esto [enlace aquí] (http://stackoverflow.com/questions/1906163/how-to-force-a-page-refresh-while-pressing-the-back-button-in- mac-safari) que describe a alguien que quiere evitar que Safari guarde en caché la página anterior. – Swaff
¡Encontré esto hoy y resolvió un problema que estaba teniendo! –