Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 26th, 2012  |  syntax: None  |  size: 1.55 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Choose OutputCache policy based on query string
  2. /controller/action/id?revision=123
  3.        
  4. [OutputCache(Duration=10,Location=OutputCacheLocation.Server)]
  5. public Action(string id)
  6. {
  7.     long lastRevision = GetLastRevision(id);
  8.     return RedirectToAction("Action",
  9.         new { Id = id, revision = lastRevision });
  10. }
  11.  
  12. [OutputCache(Duration=int.MaxValue,Location=OutputCacheLocation.Server)]
  13. public Action(string id, long revision)
  14. {
  15.    // ...
  16. }
  17.        
  18. public class RevisionMethodSelectorAttribute : ActionMethodSelectorAttribute
  19. {
  20.     public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
  21.     {
  22.         var revision = controllerContext.Controller.ValueProvider.GetValue("revision");
  23.         var hasRevisionParam = methodInfo.GetParameters().Any(p => string.Equals("revision", p.Name, StringComparison.OrdinalIgnoreCase));
  24.         if (revision != null && !string.IsNullOrEmpty(revision.AttemptedValue) && hasRevisionParam)
  25.         {
  26.             return true;
  27.         }
  28.  
  29.         if ((revision == null || string.IsNullOrEmpty(revision.AttemptedValue)) && !hasRevisionParam)
  30.         {
  31.             return true;
  32.         }
  33.  
  34.         return false;
  35.     }
  36. }
  37.        
  38. [RevisionMethodSelector]
  39. public ActionResult MyAction(string id)
  40. {
  41.     long lastRevision = GetLastRevision(id);
  42.     return RedirectToAction("MyAction", new { id = id, revision = lastRevision });
  43. }
  44.  
  45. [RevisionMethodSelector]
  46. [OutputCache(Duration = int.MaxValue, Location = OutputCacheLocation.Server, VaryByParam = "revision")]
  47. public ActionResult MyAction(string id, long revision)
  48. {
  49.     ...
  50. }