2013-09-27 1 views
0

J'ai cet exemple de OutputCache. Mon problème est que je veux que la page soit mise en cache seulement si le [id] est égal à NULL. Dans tous les autres cas, je ne veux pas avoir de cache du tout.Comment utiliser OutputCache pour un argument spécifique uniquement?

myController:

[OutputCache(Duration = int.MaxValue, VaryByParam = "id")] 
public ActionResult Details(int id) 
{} 

RouteConfig:

routes.MapRoute(
    name: "edit", 
    url: "edit/{id}", 
    defaults: new { 
     controller = "asd", 
     action = "Details", 
     id = UrlParameter.Optional 
    } 
); 

Répondre

1

Vous pouvez spécifier (et mettre en œuvre) le paramètre VaryByCustom de OutputCacheAttribute:

MyController.cs

[OutputCache(Duration = int.MaxValue, VaryByCustom = "idIsNull")] 
public ActionResult Details(int id) 
{ 
} 

Global.asax.cs

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg.ToLower() == "idisnull") 
    { 
     return string.IsNullOrWhiteSpace(Request.QueryString["id"]) 
      ? string.Empty 
      // unique key means it won't have a consistent value to use 
      // as a cache lookup 
      : ((new DateTime(1970, 1, 1) - DateTime.Now).TotalMilliseconds).ToString(); 
    } 
} 
+0

Merci, mais le [id] n'est pas une chaîne de requête. Voir édition pour les détails de routage – user1615362

+1

@ user1615362: Je ne le vois pas défini dans la route 'url', alors quel est le problème? –

+0

Cet IsNullOrWhiteSpace (Request.QueryString ["id"]) sera toujours vrai. – user1615362

Questions connexes