gpt4 book ai didi

asp.net - 如何为客户端和服务器缓存设置不同的缓存过期时间

转载 作者:行者123 更新时间:2023-12-02 04:49:41 25 4
gpt4 key购买 nike

我想让某些页面为客户端提供 10 分钟缓存,为服务器提供 24 小时缓存。原因是如果页面发生变化,客户端将在 10 分钟内获取更新版本,但如果没有任何变化,服务器只需每天重建一次页面。

问题在于输出缓存设置似乎覆盖了客户端设置。这是我的设置:

自定义 ActionFilterAttribute 类

public class ClientCacheAttribute : ActionFilterAttribute
{
private bool _noClientCache;

public int ExpireMinutes { get; set; }

public ClientCacheAttribute(bool noClientCache)
{
_noClientCache = noClientCache;
}

public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (_noClientCache || ExpireMinutes <= 0)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
}
else
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(ExpireMinutes));
}

base.OnResultExecuting(filterContext);
}
}

网络配置设置

  <outputCacheSettings>
<outputCacheProfiles>
<add name="Cache24Hours" location="Server" duration="86400" varyByParam="none" />
</outputCacheProfiles>
</outputCacheSettings>

我如何调用它:

[OutputCache(CacheProfile = "Cache24Hours")]
[ClientCacheAttribute(false, ExpireMinutes = 10)]
public class HomeController : Controller
{
[...]
}

但是查看 HTTP header 显示:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Expires: -1

我怎样才能正确实现这个?它是一个 ASP.NET MVC 4 应用程序。

最佳答案

您需要为服务器端缓存实现自己的解决方案,而对于客户端缓存,可以使用 ClientCacheAttribute 或 OutputCache。以下是您需要针对服务器端缓存定制解决方案的原因。

  • ClientCacheAttribute 将缓存策略设置为 HttpCachePolicyBase 类型的 Response.Cache
  • 并且内置OutputCache还将缓存策略设置为Response.Cache

这里我想强调的是,我们没有 HttpCachePolicyBase 的集合,但我们只有一个 HttpCachePolicyBase 对象,因此我们无法为给定的响应设置多个缓存策略。

即使我们可以将 Http Cacheability 设置为 HttpCacheability.ServerAndPrivate,但您仍然会遇到缓存持续时间的其他问题(即客户端 10 分钟,服务器 24 小时)

我建议使用OutputCache进行客户端缓存,并为服务器端缓存实现您自己的缓存机制。

关于asp.net - 如何为客户端和服务器缓存设置不同的缓存过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com