estoy usando asp.net MVC, así que hice esto en mi controlador de
if (User.Identity.IsAuthenticated) {
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetNoStore();
Response.Cache.SetNoServerCaching();
}
else {
Response.Cache.VaryByParams["id"] = true; // this is a details page
Response.Cache.SetVaryByCustom("username"); // see global.asax.cs GetVaryByCustomString()
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
}
La razón por la que hice de esta manera (en lugar de forma declarativa) era también necesitaba la capacidad para encenderlo y fuera de configuración (no se muestra aquí, pero hay una verificación adicional en la variable si para mi configuración).
Aún necesita cambiar según el nombre de usuario, de lo contrario no ejecutará este código cuando aparezca un usuario conectado. Mi función GetVaryByCustomString devuelve "anónimo" cuando no está autenticado o el nombre de los usuarios cuando está disponible.
¿Alguna vez resolvió este problema? Tenemos una necesidad similar que varyByCustom no es la respuesta para. –
Actualmente utilizo la solución de código subyacente, donde puedo decidir fácilmente si quiero almacenar en caché la página o no. Si el usuario no está conectado, guardo en caché. Si el usuario está conectado, la memoria caché está desactivada para una página completa (y en su lugar solo almacena partes "estáticas"). Después de recibir la respuesta a continuación, busqué una solución sin código subyacente, pero no encontré nada útil. Después de todo, una solución de código subyacente también es muy clara y no tiene desventajas importantes sobre ASP.NET puro. –
¿Podría compartir su solución de código subyacente? ¿Cómo controlas el caché de esa manera? –