我想在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")]
有谁知道如何实现这个目标?
干杯
答案 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的任何除数。
欢迎任何其他更好的解决方案或评论:)