我真的很困惑这里发生了什么。
似乎 (System.Web.Optimization.)Bundle
库在它 bundle 的所有文件上放置了一个文件系统观察器。每当发生变化时(例如,我调整了 CSS 文件的内容),它都会重建包。
我已经通过在 Fiddler 中向 CSS 包的 URL 发出请求来看到这项工作,它通过 100% 的时间完美地重新生成 CSS 包来工作。
但是,在 Firefox 和 Chrome 中,并且只有在某些情况下,它*似乎*没有访问网络服务器,而是继续为我提供旧的、未修改的 CSS。
奇怪的是,即使在执行完全缓存刷新 (ctrl+shift+r),甚至进入 chrome 并删除*所有*缓存数据后,它仍然为我提供完全相同的旧 CSS 文件。
这让我觉得故障/问题实际上在 Bundle
库中 - 可能 fiddler 正在传递不同的请求 header 或其他东西,这使得 Bundle
处理程序的行为不一致?
感谢对此事的任何帮助,因为它已经持续了好几天。
编辑:所以我整理了以下似乎有效的代码
...
var styleBundle = new Bundle(virtualPath, new NoCacheTransform());
...
public class NoCacheTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
context.EnableOptimizations = false;
context.UseServerCache = false;
response.ContentType = "text/css";//text/css; charset=utf-8
response.Cacheability = HttpCacheability.NoCache;
}
}
其中一些属性分配可能不是必需的,但它更重要。
最佳答案
这可能有助于对 bundle 进行指纹识别?引用http://madskristensen.net/post/cache-busting-in-aspnet了解更多信息。
关于c# - 使用 ASP.NET CSS 包时浏览器的奇怪缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20070265/