打电话
http://foo/home/cachetest
为了
[UrlRoute(Path = "home/cachetest")]
[OutputCache(Duration = 10, VaryByParam = "none")]
public ActionResult CacheTest()
{
return Content(DateTime.Now.ToString());
}
无论我刷新页面的频率如何,都会每 10 秒显示相同的内容。
是否可以轻松添加滑动过期时间,以便在我刷新页面的情况下 10 秒后不会更改?
最佳答案
您可以创建一个自定义缓存过滤器而不是默认的 OutputCache 过滤器。像下面这样,请注意可以在此处设置滑动到期时间。需要注意的是,我没有将它用于滑动到期,但适用于其他事情。
public class CacheFilterAttribute : ActionFilterAttribute
{
private const int Second = 1;
private const int Minute = 60 * Second;
private const int Hour = 60 * Minute;
public const int SecondsInDay = Hour * 24;
/// <summary>
/// Gets or sets the cache duration in seconds.
/// The default is 10 seconds.
/// </summary>
/// <value>The cache duration in seconds.</value>
public int Duration
{
get;
set;
}
public int DurationInDays
{
get { return Duration / SecondsInDay; }
set { Duration = value * SecondsInDay; }
}
public CacheFilterAttribute()
{
Duration = 10;
}
public override void OnActionExecuted(
ActionExecutedContext filterContext)
{
if (Duration <= 0) return;
HttpCachePolicyBase cache =
filterContext.HttpContext.Response.Cache;
TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);
cache.SetCacheability(HttpCacheability.Public);
cache.SetExpires(DateTime.Now.Add(cacheDuration));
cache.SetMaxAge(cacheDuration);
cache.SetSlidingExpiration(true);
cache.AppendCacheExtension("must-revalidate, proxy-revalidate");
}
}
关于asp.net-mvc - Asp.net Mvc OutputCache 属性和滑动过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577160/