gpt4 book ai didi

asp.net-mvc-3 - 为什么我的图像没有缓存?

转载 作者:行者123 更新时间:2023-12-02 05:06:07 24 4
gpt4 key购买 nike

我有一个 ASP.NET MVC3 应用程序设置。有一个返回图像的 Controller ,我添加了以下内容:

[OutputCache(Duration = 3600, VaryByParam = "id;width", Order = 1000, Location = OutputCacheLocation.Client)]
public ActionResult Get(string id, int width)
{ ... }

但是当我检查这些图像的 HTTP 响应时,它们都有 header “cache-control: no-cache”和“expires: -1”,这意味着浏览器永远不会缓存它们。

我环顾四周,但找不到任何关于响应告诉浏览器不要缓存它们的原因。我什至尝试建立自己的属性:

public class ContentExpiresHeader : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
var cache = filterContext.HttpContext.Response.Cache;
cache.SetExpires(DateTime.Now.AddYears(1));
cache.SetCacheability(HttpCacheability.Private);
cache.SetLastModifiedFromFileDependencies();
base.OnResultExecuted(filterContext);
}
}

但这也没有让我有任何收获。

感谢任何帮助。

更新:我开始认为这一定是某个地方的 IIS 设置,它添加了无缓存和覆盖。不过,我似乎找不到任何东西。唯一奇怪的是,如果我在调用 .Set...() 方法后查看 cache 变量的状态,内部变量尚未更新。我本以为会有所改变,但它们仍然显示“无缓存”。

更新 2:我应该补充一点,这个方法的返回是:

return File(...);

更新 3:我也发现了这个 (http://dotnetslackers.com/articles/aspnet/ASP-NET-MVC-3-Controller-for-Serving-Images.aspx) 并尝试实现它但没有任何运气。仍然在图像的响应 header 上获取无缓存选项。

更新 4:只需检查服务器设置...如果我绕过我的 Controller 并直接转到服务器上的图像文件,那么它会缓存并在响应 header 中具有正确的缓存设置。

更新 5(是的,变得疯狂):创建了一个全新的 MVC3 项目,只制作了一个 Controller ,它缓存得很好。所以我在直接代码之外得到了一些东西,它正在添加这个 pragma:no-cache 东西,对于我的生活,我无法弄清楚它会是什么。 =-/

最佳答案

尝试将可缓存性从 HttpCachability.Private 更改为 HttpCachability.ServerAndPrivate。它应该将缓存控制保持为私有(private)并且不抑制电子标签/上次修改。

关于asp.net-mvc-3 - 为什么我的图像没有缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463733/

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