2010-09-15 7 views
2

est-il un moyen de pour empêcher une page mise en cache lorsque l'attribut OutputCache a été mis sur une action?Prévenir vue de retour étant mis en mémoire cache lorsqu'une erreur se produit

Il en est ainsi que, lorsque la page est ensuite frappé, il ne stocke pas la page d'erreur générique qui a été retourné précédemment.

Un exemple ci-dessous montre un exemple où il serait souhaitable que l'application ne cache la page, quand il fait une exception pour une raison quelconque (timeout db, etc.).

[OutputCache(CacheProfile = "Homepage")] 
public ActionResult Index() 
{ 
    var model = new HomepageModel(); 

    try 
    { 
    model = Db.GetHomepage(); 
    } 
    catch 
    { 
    //Do not want to cache this! 
    return View("Error"); 
    } 

    //Want to cache this! 
    return View(); 
} 

Mise à jour En fin de compte, je simplement besoin d'ajouter ce qui suit:

filterContext.HttpContext.Response.RemoveOutputCacheItem(filterContext.HttpContext.Request.Url.PathAndQuery); 

Il est récupéré à partir another question.

Répondre

1

En fin de compte, je simplement besoin d'ajouter ce qui suit à la vue d'erreur:

<%@ OutputCache NoStore="true" Duration="30" VaryByParam="*" %> 

Ceci définit la page à mise en mémoire cache pendant 30 secondes seulement.

! Simples

2

méthode la plus simple est de ne pas retourner la vue d'erreur de cette méthode d'action, et rediriger la place à une action d'erreur lorsque l'erreur se produit.

catch 
{ 
    return RedirectToAction("Error"); 
} 

Si vous ne pouvez pas le faire, il est possible d'écrire un filtre d'action qui ajuste les valeurs de Response.Cache.

+0

Salut @Clicktricity. Merci pour votre réponse. Malheureusement, la redirection de l'utilisateur n'est pas possible. J'ai regardé un autre problème similaire - http://stackoverflow.com/questions/1043112 après avoir découvert 'RemoveOutputCacheItem'. ce qui est plus ou moins ce que je voulais. –