部署网站的新版本后,浏览器将从旧网页的缓存中加载所有内容,直到强制刷新完成。
在ASP.net MVC中,如果文件成为捆绑包,则由Optimization Framework处理。版本添加到您的文件链接,并且如果捆绑文件中发生更改,则会生成一个新令牌。遵循以下代码:
例如,js文件名为: datatables
当您将其放入同名的套装中时,您会看到
datatables?v=anY9_bo7KitrGnXQr8ITP3ylmhQe9NDzSjgLpLQWQFE1
作为文件名。更改datatables
并再次在浏览器中查看文件名,当然它将更改:
datatables?v=r8yhQBxKyDgrOGyqr1ndtdG92Ije09nqTY7yogrOSTk1
-但是,如果文件不在捆绑包中怎么办?-是否可以强制浏览器刷新缓存?
我们有一个解决方案,其中有一些不同的实现方式。我们使用上面的解决方案。
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
文件也进行更改,因此文件的版本也会更改,并且在下次打开浏览器时,它会检测到一个新文件并提取它。
最好将逻辑放在辅助方法中,因为函数具有所有优点,包括:使代码可测试,避免重复两次文件路径,还可以更改逻辑而不更改此aspx / cshtml文件。