J'ai une application ASP.NET MVC dans laquelle certaines ressources sont adressées comme suit :
/controller/action/id?revision=123
En révision est facultatif :
- s'il est manquant, je fais une redirection 302 vers la dernière révision. Je souhaite que cette réponse de redirection ne soit mise en cache que pendant une courte période, voire pas du tout.
- s'il est présent, je veux mettre la réponse en cache pendant longtemps, car toute révision de la ressource est immuable.
Ma première tentative a été de faire quelque chose comme ça :
[OutputCache(Duration=10,Location=OutputCacheLocation.Server)]
public Action(string id)
{
long lastRevision = GetLastRevision(id);
return RedirectToAction("Action",
new { Id = id, revision = lastRevision });
}
[OutputCache(Duration=int.MaxValue,Location=OutputCacheLocation.Server)]
public Action(string id, long revision)
{
// ...
}
Malheureusement, le routage ASP.NET MVC ne semble pas apprécier les surcharges de méthodes. Il s'attend à ce qu'il n'y ait qu'une seule méthode Action
avec un paramètre optionnel à la place (c'est-à-dire long? revision
), mais je ne peux pas spécifier des politiques de mise en cache différentes pour les deux cas.
Comment puis-je choisir une politique de mise en cache différente en fonction de la présence de la chaîne de requête ici ?