net mvc asp c# asp.net-mvc asp.net-mvc-2 outputcache

c# - mvc - asp net outputcache



Por qué GetVaryByCustomString no se llama (3)

Su definición de OutputCache es incorrecta. Debes especificar la Duration :

[OutputCache(VaryByCustom = "user", Duration = 50)] public ActionResult Index(string _entity, string id)

Ahora se GetVaryByCustomString método GetVaryByCustomString reemplazado. Además, no olvide que se GetVaryByCustomString método GetVaryByCustomString solo después de que la acción del controlador haya terminado de ejecutarse.

La memoria caché de salida se implementa en ASP.NET MVC2 usando el código a continuación.

GetVaryByCustomString método GetVaryByCustomString no se llama: colocar el punto de interrupción en su primera línea y la aplicación en ejecución muestra que no se alcanzó el punto de corte. Se alcanza el punto de interrupción en el índice del controlador ().

¿Cómo usar VaryByCustom en ASP.NET MVC2?

Controlador:

[OutputCache(VaryByCustom = "user")] public ActionResult Index(string _entity, string id) { ...

Global.asax.cs:

public class MvcApplication : System.Web.HttpApplication { public override string GetVaryByCustomString(HttpContext context, string arg) { if (arg == "user") { HttpCookie cookie = context.Request.Cookies["Company"]; if (cookie != null) return Thread.CurrentPrincipal.Identity.Name + "," + cookie.Value; return Thread.CurrentPrincipal.Identity.Name; } return base.GetVaryByCustomString(context, arg); } }


Solo quiero mencionar otras 2 causas

Si hay algún atributo [NoCache] en el proyecto, GetVaryByCustomString no se activará .

Si pones

Location = OutputCacheLocation.Client,

GetVaryByCustomString no se activará .


Un proyecto en el que trabajé recientemente tenía un filtro global que impedía que el almacenamiento en caché de resultados funcionara:

public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new NoCacheResponseAttribute()); } } public class NoCacheResponseAttribute : BaseActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { var response = filterContext.RequestContext.HttpContext.Response; response.Cache.SetCacheability(HttpCacheability.NoCache); response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); response.Cache.SetNoStore(); } }

Después de comentar la línea que agrega el filtro, el almacenamiento en caché de salida comenzó a funcionar como se esperaba.