基本用法
为防止浏览器缓存,一般会在js和css文件后添加版本号,但每次手工改将会很麻烦,因此可以考虑将文件修改时间作为版本号,并且自动添加到页面的js和css后缀上。
先写一个获取文件名的公共方法:
public string GetFileTimeStampString(string filePath)
{
FileInfo fi = new FileInfo(Server.MapPath(filePath));
var timeStampString = fi.LastWriteTime.ToFileTime().ToString();
return timeStampString;
}
然后在aspx的页面中引用js或css的地方加上:
<script src="../Scripts/xxx.js?v=<%Response.Write(GetFileTimeStampString("../Scripts/xxx.js")); %>"></script>
注意,GetFileTimeStampString参数的路径要和前面src的路径一致。
最后页面访问时会自动生成类似以下的内容,v的值会随着文件修改时间不同而不同。
<script src="../Scripts/xxx.js?v=131559771981760542"></script>
扩展用法
1、每次访问页面,都要读一次文件修改时间,这样频繁读取有些不太合理,因此考虑加上缓存,例如:
public string GetFileTimeStampString(string filePath)
{
var obj = DataCache.GetCache(filePath);
if (obj != null)
return obj.ToString();
FileInfo fi = new FileInfo(Server.MapPath(filePath));
var timeStampString = fi.LastWriteTime.ToFileTime().ToString();
DataCache.SetCache(filePath, timeStampString, DateTime.Now.AddMinutes(10));
return timeStampString;
}
其中DataCache类是自己封装的,代码就不贴了。
这样每10分钟以上才会读一次文件修改时间。
2、版本号加密
使用v=131559771981760542的模式容易被猜到文件更新频次和版本,因此可以考虑将其加密,例如将它进行md5,或者其它hash算法。具体代码不就贴了,大家懂。
如果MVC的网站,可以参考以下文章:
http://blog.csdn.net/zx13525079024/article/details/19153495