outputcache时间而不是持续时间MVC

时间:2014-08-11 20:40:59

标签: asp.net-mvc caching controller outputcache

我想在Controller中缓存方法的结果。问题是我想在每小时删除缓存:00。持续时间=" 3600"不是一个选项,因为如果例如在3:20第一次调用该方法,缓存将持续到4:20并且我需要在4:00更新它,因为数据库将在此更新时间和保持这些数据最新是非常重要的。

我现在的web.config文件是这样的:

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="1HourCacheProfile" varyByParam="*" enabled="true" duration="3600" location="Server" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

我把这个注释放在我想要缓存的方法之前

[OutputCache(CacheProfile = "1HourCacheProfile")]

有谁知道如何实现这个目标?

干杯

1 个答案:

答案 0 :(得分:1)

好的我已经有了解决方案。

我创建了一个继承OutputCacheAttribute的类,我将在这段代码中显示:

public class HourlyOutputCacheAttribute : OutputCacheAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        SetupDuration();
        base.OnActionExecuting(filterContext);
    }

    private void SetupDuration()
    {
        int seconds = getSeconds((DateTime.Now.Minute * 60) + DateTime.Now.Second, base.Duration);
        base.Duration -= seconds;            
    }

    private int getSeconds(int seconds, int duration)
    {
        if (seconds < duration)
            return seconds;
        else
            return getSeconds(seconds - duration, duration);
    }

}

然后我只是将这个Annotation放在控制器的方法中

    [HourlyOutputCache(VaryByParam = "*", Duration = 3600, Location = OutputCacheLocation.Server)]

就是这样......而且我认为你可以使用3600的任何除数。

欢迎任何其他更好的解决方案或评论:)