asp.net-mvc - Asp.net Mvc OutputCache 属性和滑动过期

标签 asp.net-mvc caching

打电话

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/

相关文章:

java - hibernate只读查询缓存机制

iphone - 如何缓存表格 View 的某些内容?

c - C 函数的实际性能测试

asp.net-mvc - 如何在MVC单元测试类中模拟Request.Files[]?

asp.net-mvc - 如何将 MVC 5 IdentityModels.cs 移动到单独的程序集中

asp.net-mvc - asp.net mvc3 razor 语法通过反射将模型转换为其子类

javascript - 未在 Google Chrome 中清除缓存

asp.net-mvc - 禁用并指定 Html.DropDownList 的默认选择

asp.net - 如何使用 json 将复杂类型传递给 ASP.NET MVC Controller

java - Redis 集群与 Spring Boot 集成