I have the code below and want Duration
in [OutputCache(Duration = 10)]
line to have a variable value so that I can read it from DB
or from a List
Collection.
And I want be able to reset the server cache immediately, when Duration
had changed.
How can I make Duration
varied and reset cached HTML
data when the Duration
is changed? Here is my code.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Cache_Example.Controllers
{
public class HomeController : Controller
{
// GET: Home
// [OutputCache(Duration = 10)]
public ActionResult Index()
{
return View();
}
[OutputCache(Duration = 10)]
public ActionResult ShowDate()
{
return PartialView();
}
}
}
To change the duration follow this:
How to use dynamic duration value in Output Caching? (please credit original author)
Then you can change the
Duration
dynamically and globally through theCacheConfig.Duration
And you can still override the global setting on every action if you want:
Then you can reset the server cache immediately when Duration has changed yourself. Here's how:
"The ASP.NET cache object is located in the System.Web namespace, and because it is a generic cache implementation, it can be used in any application that references this namespace.
The System.Web.Caching.Cache class is a cache of objects. It is accessed either through the static property System.Web.HttpRuntime.Cache or through the helper instance properties System.Web.UI.Page and System.Web.HttpContext.Cache. It is therefore available outside the context of a request. There is only one instance of this object throughout an entire application domain, so the HttpRuntime.Cache object can exist in each application domain outside of Aspnet_wp.exe.
The following code shows how you can access the ASP.NET cache object from a generic application.
After you access the cache object for the current request, you can use its members in the usual way."
REF: Obsolete MSDN Source: Caching Architecture Guide for .NET Framework Applications
Note: With .Net 3.5 you could only use InProc cache, with .NET 4 you can store your cache outside the process as well as using custom CacheProviders.
I want to emphasize this point, if the cache is supposed to last longer than the AppPool recycles (eg daily) then you need to cache Out-Of-Process.
Also check its being cached on the server: http://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx