【问题标题】:Cache busting with Scripts.Render but without bundle URL使用 Scripts.Render 但没有捆绑 URL 的缓存破坏
【发布时间】:2016-02-16 15:27:45
【问题描述】:

当使用 EnableOptimisations 设置为 true 的 Bundles 时,输出 URL 包含一个哈希值,以防止浏览器从缓存中加载已更改的文件。

@Scripts.Render("~/content/js/global")

输出:

<script src="/content/js/global?v=PqstRRGF8qsUsJfHu6NBBBp6eDxYBz1JCbHY6CQJVks3"></script>

但是,我们应用程序中的某些文件特定于一页。我们直接引用这些:

@Scripts.Render("~/areas/areaname/content/js/page-name.js")

这种情况下的输出 URL 没有哈希,因此被缓存,当我们发布对这些文件的更改时会导致问题。

我们宁愿不单独更改每个引用,也不必在每次更改文件时手动更改 URL。

如何向所有捆绑的脚本和样式 URL 全局添加哈希(或版本号)?

【问题讨论】:

    标签: asp.net-mvc caching bundling-and-minification


    【解决方案1】:

    我最终得到了一个完全不同的解决方案,但是,我偶然发现了 a question,其中包含一个对我有帮助的想法,并希望这对其他人有所帮助。

    您可以手动设置默认标签格式并包含版本号。

    string versionNumber = "1.2.3.4"; // get from assembly or config setting
    
    Styles.DefaultTagFormat = string.Format("<link href='{{0}}?v={0}' rel='stylesheet'/>", versionNumber);
    Scripts.DefaultTagFormat = string.Format("<script src='{{0}}?v={0}'></script>", versionNumber);
    

    我能看到的唯一问题是您的 URL 是否已经包含查询字符串。这将附加第二个 ? 而不是 &amp;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2012-03-09
      相关资源
      最近更新 更多