Атрибут Asp.net Mvc OutputCache и скользящее истечение

Честно, столько языков основано на синтаксисе C, с которым это - хорошая вещь быть знакомым. Я занял бы неделю или два для ознакомления себя с C независимо.

Однако я действительно просто преподавал мне Objective C, и я должен быть честным: Я не нашел свой опыт C быть столь же полезным, как я буду думать. Objective C был определенно открытием глаза для меня.

7
задан Arnis Lapsa 16 October 2009 в 10:04
поделиться

2 ответа

Читал исходный код OutputCacheAttribute , и я не думаю, что там есть простой способ сделать это

Скорее всего, вам понадобится создать собственное решение.

2
ответ дан 7 December 2019 в 01:23
поделиться

Вы можете создать собственный фильтр кэша вместо стандартного фильтра 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");
        }
    }
7
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: