2010-11-09 16 views
0

Existe-t-il un moyen d'empêcher la mise en cache d'une page selon une logique?Empêche la mise en cache de la page lors de l'utilisation de OutputCacheAttribute

Je veux mettre en cache l'accès anonyme à une page, donc je peux définir VaryByCustom="user" et avoir de la magie dans la méthode GetVaryByCustomString de Global.asax. D'accord. Mais je ne veux pas réellement mettre en cache la page si l'utilisateur est authentifié, seulement s'il n'est pas authentifié. Y a-t-il un moyen de spécifier ce genre de chose? La raison pour laquelle je veux que les données ne soient pas ajoutées au cache pour commencer (au lieu d'être ajouté avec une clé aléatoire) est que lorsque le cache grandit, les choses sont rejetées et je ne veux pas la version non authentifiée se faire jeter.

Répondre

0

Vous pouvez effectuer cela par programme dans votre chargement de page dans les formulaires Web asp.net.

bool isAuthenticated = /*variable assignment*/; 
if (isAuthenticated){ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
} 

Si vous voulez cette logique dans une méthode séparée quelque part, vous pouvez enregistrer un rappel comme ça.

Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(MethodWhichSetsCacheability), null); 

Dans MVC, vous devriez être en mesure d'exécuter le code ci-dessus dans votre contrôleur

0

Vous pouvez vérifier si l'utilisateur est authentifié dans GetVaryByCustomString.

context.Request.IsAuthenticated 

Si vrai renvoyer la valeur null. Si ce n'est pas le cas, renvoyez une chaîne fixe.

L'implémentation de base de GetVaryByCustomString renvoie null, donc cela devrait être sûr. Mais puisque null ne peut pas être utilisé comme une clé dans le cache, je pense que cette page ne sera pas mise en cache.

Cependant, je n'ai pas testé cela!

+0

Oui, mais la question est ce que les clés de cache plus sont ajoutés, les choses sont poussés hors du cache. Je ne veux surtout pas que la version non-authentifiée soit poussée hors du cache! – hackerhasid

+0

Ah ok ... dans ce cas ... en regardant les docs, l'implémentation de base de GetVaryByCustomString retourne null. Je me demande si vous faites cela - est-ce que la page n'est pas mise en cache ... a besoin d'être testée. Cela semble probable car le cache ne peut pas utiliser null comme une clé. –