js和css文件自动在后缀处添加版本号(.NET)

基本用法

为防止浏览器缓存,一般会在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




猜你喜欢

转载自blog.csdn.net/winnyrain/article/details/78664623