Pour modifier la durée, procédez comme suit :
Comment utiliser une valeur de durée dynamique dans la mise en cache de sortie ? (veuillez créditer l'auteur original)
J'hériterais de la OutputCache
et y définir l'attribut Duration
:
public static class CacheConfig
{
public static int Duration = 36600;
}
public class MyOutputCacheAttribute : OutputCacheAttribute
{
public MyOutputCacheAttribute()
{
this.Duration = CacheConfig.Duration;
}
}
[MyOutputCache(VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
Ensuite, vous pouvez modifier le Duration
de manière dynamique et globale par le biais du CacheConfig.Duration
Et vous pouvez toujours remplacer le paramètre global sur chaque action si vous le souhaitez :
[MyOutputCache(Duration = 100, VaryByParam = "none")]
public ActionResult OtherAction()
{
return View();
}
Vous pouvez alors réinitialiser le cache du serveur immédiatement lorsque Durée a changé vous-même. Voici comment procéder :
"L'objet de cache ASP.NET est situé dans l'espace de noms System.Web et, comme il s'agit d'une implémentation de cache générique, il peut être utilisé dans toute application qui fait référence à cet espace de noms.
La classe System.Web.Caching.Cache est un cache d'objets. On y accède soit par la propriété statique System.Web.HttpRuntime.Cache, soit par les propriétés d'instance d'aide System.Web.UI.Page et System.Web.HttpContext.Cache. Il est donc disponible en dehors du contexte d'une requête. Il n'y a qu'une seule instance de cet objet dans tout un domaine d'application, de sorte que l'objet HttpRuntime.Cache peut exister dans chaque domaine d'application en dehors d'Aspnet_wp.exe.
Le code suivant montre comment accéder à l'objet cache ASP.NET à partir d'une application générique.
HttpRuntime httpRT = new HttpRuntime();
Cache cache = HttpRuntime.Cache;
Après avoir accédé à l'objet cache pour la requête en cours, vous pouvez utiliser ses membres de la manière habituelle."
REF : Source MSDN obsolète : Guide de l'architecture de mise en cache pour les applications .NET Framework
Note : Avec .Net 3.5, vous ne pouviez utiliser que le cache InProc, avec .NET 4, vous pouvez stocker votre cache en dehors du processus ainsi qu'utiliser des fichiers personnalisés CacheProviders .
Je veux insister sur ce point, si le cache est censé durer plus longtemps que le recyclage de l'AppPool (par exemple quotidiennement), alors vous devez mettre en cache Out-Of-Process.
Vérifiez également qu'il est mis en cache sur le serveur : http://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx