6

I'm using ASP.NET MVC3.
I've used Output Caching on controller method.

   [OutputCache(Duration = 3660, VaryByParam = "none")]
   public ActionResult Index()
   {
       some code;
       return View();
   }

I want to put dynamic duration using some static variable or something else in Output Caching.

How can i do this?

Dharmik Bhandari
  • 1,702
  • 5
  • 29
  • 60

1 Answers1

11

I would inherit from the OutputCache attribute and set there the Duration:

public static class CacheConfig
{
    public static int Duration = 36600;
}

public class MyOutputCacheAttribute : OutputCacheAttribute
{
    public MyOutputCacheAttribute()
    {
        this.Duration = CacheConfig.Duration;
    }
}

[MyOutputCache(VaryByParam = "none")]
public ActionResult Index()
{
    return View();
}

Then you can change the Duration dynamically and globally trough the CacheConfig.Duration

And you can still override the global setting on every action if you want:

[MyOutputCache(Duration = 100, VaryByParam = "none")]
public ActionResult OtherAction()
{
    return View();
}
nemesv
  • 138,284
  • 16
  • 416
  • 359
  • Won't work, attributes are instantiated only ONCE, changing `CacheConfig.Duration` at *runtime* won't magically re-execute your constructor – Alex from Jitbit Mar 02 '20 at 13:11