温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - How Force browser to reload cached static file with versioning?
asp.net asp.net-mvc browser-cache c# caching

c# - 如何强制浏览器使用版本控制重新加载缓存的静态文件?

发布于 2020-05-11 09:42:37


部署网站的新版本后,浏览器将从旧网页的缓存中加载所有内容,直到强制刷新完成。

在ASP.net MVC中,如果文件成为捆绑包,则由Optimization Framework处理。版本添加到您的文件链接,并且如果捆绑文件中发生更改,则会生成一个新令牌。遵循以下代码:

例如,js文件名为: datatables

当您将其放入同名的套装中时,您会看到

datatables?v=anY9_bo7KitrGnXQr8ITP3ylmhQe9NDzSjgLpLQWQFE1

作为文件名。更改datatables并再次在浏览器中查看文件名,当然它将更改:

datatables?v=r8yhQBxKyDgrOGyqr1ndtdG92Ije09nqTY7yogrOSTk1

-但是,如果文件不在捆绑包中怎么办?-是否可以强制浏览器刷新缓存?

查看更多

提问者
Hamed Moghadasi
被浏览
38
Hamed Moghadasi 2019-02-01 00:23

我们有一个解决方案,其中有一些不同的实现方式。我们使用上面的解决方案。

datatables?v=1

我们可以处理文件的版本,这意味着每次更改文件时,也要更改文件的版本。但这不是合适的方法。

使用Guide的另一种方式也不适合,因为它每次获取文件时都不会从浏览器缓存中使用。

datatables?v=Guid.NewGuid()

最好的方法是:

当发生文件更改时,也要更改版本。检查以下代码:

<script src="~/scripts/main.js?v=@File.GetLastWriteTime(Server.MapPath("/scripts/main.js")).ToString("yyyyMMddHHmmss")"></script>

通过这种方式,当您更改文件时,LastWriteTime文件也进行更改,因此文件的版本也会更改,并且在下次打开浏览器时,它会检测到一个新文件并提取它。