Dans mon application, je me souviendrai du choix de la langue de l'utilisateur en session. Le problème est que si j'utilise le cache de sortie, la fonction de changement de langue ne fonctionnera pas, car elle met en cache le résultat lorsque je récupère de la base de données en fonction de la valeur Session ["lang"]. Donc, si j'ai une autre méthode pour utiliser la fonction de cache? Ou comment puis-je diminuer le temps de réponse?Comment utiliser outputcache dans cette situation?
Répondre
Une partie de l'infrastructure de mise en cache de sortie est le mécanisme VaryBy, qui permet à ASP.NET de conserver des caches parallèles de la même page, modifiés par certaines données, comme une chaîne de requête. Dans ce cas, le mécanisme VaryByCustom peut être le plus simple à implémenter. Here's a short article with a good example.
D'abord, l'attribut de mise en cache:
[OutputCache(CacheProfile = "CachedPage")]
public ActionResult Index()
{
return View();
}
Le profil de cache:
<caching>
<outputcachesettings>
<outputcacheprofiles>
<add varybycustom="Language"
varybyparam="*"
duration="86400"
name="CachedPage" />
</outputcacheprofiles>
</outputcachesettings>
</caching>
Et enfin, la logique personnalisée dans Global.asax.cs:
public override string GetVaryByCustomString(
HttpContext context,
string arg)
{
if (arg == "Language")
{
return Session["lang"].ToString();
}
else
{
return base.GetVaryByCustomString(context, arg);
}
}
maintenant Pour chaque valeur unique que Session["lang"]
renvoie, ASP.NET conservera un c en cache opy de la page exécutée sous ce paramètre.
Enregistrer cette valeur dans les cookies, session ne sont pas disponibles dans GetVaryByCustomString
Cela devrait être un commentaire. –
- 1. @property, ok dans cette situation?
- 2. Comment indiquer les différences dans cette situation?
- 3. Comment se comporte JavaScript dans cette situation?
- 4. Dois-je utiliser plusieurs threads dans cette situation? [Ruby]
- 5. Recommandez la meilleure approche dans cette situation
- 6. Dactylographie: comment traiteriez-vous cette situation?
- 7. Est-LINQ dans cette situation surpuissance
- 8. Que signifie SIGPIPE dans cette situation?
- 9. Comment donner une variable PHP dans cette situation?
- 10. Comment attacher un débogueur VC++ (ou gdb) dans cette situation?
- 11. Comment appliqueriez-vous les tests unitaires dans cette situation?
- 12. Comment assurer la cohérence des données dans cette situation concurrente?
- 13. Comment protéger le code des accidents dans cette situation
- 14. Comment travailler sur cette situation particulière dans l'admin django?
- 15. Comment gérer la gestion de la mémoire dans cette situation?
- 16. Comment définir une hauteur div dans cette situation?
- 17. Comment écrire une animation jQuery dans cette situation?
- 18. En jQuery, comment utilisez-vous correctement ceci dans cette situation?
- 19. Comment gérer Focuschangelistener dans blackberry pour cette situation?
- 20. Comment concevoir la base de données pour cette situation?
- 21. Mediator Pattern fonctionne-t-il dans cette situation?
- 22. Qu'est-ce qui doit être sérialisable dans cette situation Java?
- 23. Est-il possible d'utiliser l'héritage dans cette situation? (Java)
- 24. Disponibilité du service de notification Push dans cette situation?
- 25. Valeur ou sémantique de référence dans cette situation?
- 26. Que signifie «libérer» dans cette situation sur iPhone?
- 27. Comment voulez-vous gérer cette situation avec NHibernate
- 28. Comment utiliser/configurer Unity Container IOC dans ma situation
- 29. Comment créer/appliquer un patch diff à cette situation?
- 30. Comment gérer cette situation Multithread et ne pas verrouiller?
je lis quelque chose comme ça avant, mais il semble ne fonctionne pas, il met en cache toujours le résultat. – MemoryLeak
@MemoryLeak lorsqu'il est mis en œuvre correctement, je vous assure que cela fonctionne très bien. –
J'ai trouvé le Context.Session est nul, il n'est pas censé être nul! Quoi de neuf ? – MemoryLeak