70 votes

Comment effacer par programme outputcache pour la méthode d'action du contrôleur

Si le contrôleur de l'action a la OutputCache attribut spécifié sur une action, est-il un moyen pour effacer le cache de sortie sans avoir à redémarrer IIS?

[OutputCache (Duration=3600,VaryByParam="param1;param2")]
public string AjaxHtmlOutputMethod(string param1, string param2)
{
  var someModel = SomeModel.Find( param1, param2 );

  //set up ViewData
  ...

  return RenderToString( "ViewName", someModel );
}

Je suis à la recherche à l'aide d' HttpResponse.RemoveOutputCacheItem(string path) pour la désactiver, mais je vais avoir de la difficulté à déterminer ce que le chemin d'accès doit être à la carte à la méthode d'action. Je vais essayer de nouveau avec la page aspx qui est rendu par les ViewName.

Éventuellement, je vais insérer manuellement la sortie de l' RenderToString dans la HttpContext.Cache au lieu de cela, si je ne peux pas comprendre ça.

Mise à jour

Veuillez noter que le OutputCache est VaryByParam, et de tester une codé en dur chemin "/controller/action" n'a pas fait l'outputcache, de sorte qu'il ressemble a "/controller/action/param1/param2".

Cela signifie que je vais probablement avoir à retourner au niveau de l'objet de la mise en cache et le cache manuellement la sortie pour RenderToString() :(

59voto

eu-ge-ne Points 17847

Essaye ça

 var urlToRemove = Url.Action("AjaxHtmlOutputMethod", "Controller");
Response.RemoveOutputCacheItem(urlToRemove);
 

MIS À JOUR:

 var requestContext = new System.Web.Routing.RequestContext(
    new HttpContextWrapper(System.Web.HttpContext.Current),
    new System.Web.Routing.RouteData());

var Url = new UrlHelper(requestContext);
 

MIS À JOUR:

Essaye ça:

 [OutputCache(Location= System.Web.UI.OutputCacheLocation.Server, Duration=3600,VaryByParam="param1;param2")]
 

Sinon, la suppression du cache ne fonctionnera pas car vous avez mis en cache la sortie HTML sur la machine de l'utilisateur.

5voto

Egor Points 1

Je pense que le flux correct est:

filterContext.HttpContext.Response.Cache.SetNoStore ()

4voto

Andrus Points 2693

Ajouter du code à AjaxHtmlOutputMethod

 HttpContext.Cache.Insert("Page", 1);
Response.AddCacheItemDependency("Page");
 

Pour vider le cache de sortie, vous pouvez maintenant utiliser

 HttpContext.Cache.Remove("Page");
 

3voto

chris166 Points 3333

Une autre option consiste à utiliser VaryByCustom pour le OutputCache et à gérer l'invalidation de certains éléments de cache.

Peut-être que cela fonctionne pour vous, mais ce n'est pas une solution générale à votre problème

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X