在部署新版本的网站后,浏览器会从旧网页的缓存中加载所有内容,直到强制刷新为止。
在ASP.net MVC中如果文件变为Bundle,则由Optimization框架处理。添加到文件链接的版本,如果捆绑包的文件发生更改,则会生成新令牌。请遵循以下代码:
例如,,js文件名为:datatables
当你把它放在一个同名的包中时,你会看到
datatables?v=anY9_bo7KitrGnXQr8ITP3ylmhQe9NDzSjgLpLQWQFE1
作为文件名。
更改datatables
并再次在浏览器中查看该文件的名称,肯定会更改:
datatables?v=r8yhQBxKyDgrOGyqr1ndtdG92Ije09nqTY7yogrOSTk1
- 但是,如果我们的文件不在Bundle中,我们该怎么办? - 是强制浏览器刷新缓存的方法吗? (评论它)。
答案 0 :(得分:4)
假设由于某种原因不能使用捆绑,原始张贴者建议的解决方案就足够了,但是最好将逻辑放在辅助方法中。
它使代码可测试,有助于更改逻辑而不更改.cshtml
,还有助于避免重复两次文件名。然后,您可以得到一个更简洁的代码:
<script src="@Url.ContentWithVersion("~/scripts/main.js")"></script>
为此,您可以将ContentWithVersion
扩展方法添加到现有的UrlHelper
:
using System;
using System.IO;
using System.Web;
using System.Web.Mvc;
public static class UrlHelperExtensions
{
public static string ContentWithVersion(this UrlHelper urlHelper, string path)
{
if (urlHelper == null)
throw new ArgumentNullException(nameof(urlHelper));
var result = urlHelper.Content(path);
var file = HttpContext.Current.Server.MapPath(path);
if (File.Exists(file))
result += $"?v={File.GetLastWriteTime(file).ToString("yyyyMMddHHmmss")}";
return result;
}
}
答案 1 :(得分:1)
我们有一个解决方案,其中的实现方式有所不同。我们使用上面的解决方案。
data = [
('2015-09-25 00:46', '71.925000'),
('2015-09-25 00:47', '71.625000'),
('2015-09-25 00:48', '71.333333'),
('2015-09-25 00:49', '64.571429'),
('2015-09-25 00:50', '72.285714'),
]
index, values = zip(*data)
frame = pd.DataFrame({
'values': values
}, index=pd.DatetimeIndex(index))
print(frame.index.minute)
我们可以处理文件的版本,这意味着每次我们更改文件时,也要更改文件的版本。但这不是合适的方法。
另一种使用指南的方法也不适用,因为每次它获取文件时都不会从浏览器缓存中使用它。
datatables?v=1
最好的方法是:
发生文件更改时,也请更改版本。检查以下代码:
datatables?v=Guid.NewGuid()
通过这种方式,当您更改文件时,<script src="~/scripts/main.js?v=@File.GetLastWriteTime(Server.MapPath("/scripts/main.js")).ToString("yyyyMMddHHmmss")"></script>
也随之更改,因此文件的版本也会更改,并且在下次打开浏览器时,它会检测到一个新文件并提取它。