Asp.net mvc 使用Stackoverflow这样的查询字符串对CSS文件进行版本控制?
如果您查看Stackoverflow.com的源代码,您会看到对其css文件的引用是:Asp.net mvc 使用Stackoverflow这样的查询字符串对CSS文件进行版本控制?,asp.net-mvc,css,query-string,Asp.net Mvc,Css,Query String,如果您查看Stackoverflow.com的源代码,您会看到对其css文件的引用是: <link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" /> 如何做到这一点,以便他们可以通过查询字符串传递版本,并提供正确的CSS文件?这样您的浏览器就不会缓存CSS文件。使用版本号很方便,因为css文件在每个版本中都可能发生更改 这不是调用正确css文件的方法。文件总是相同的,但版本号会让浏览器产
<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
如何做到这一点,以便他们可以通过查询字符串传递版本,并提供正确的CSS文件?这样您的浏览器就不会缓存CSS文件。使用版本号很方便,因为css文件在每个版本中都可能发生更改 这不是调用正确css文件的方法。文件总是相同的,但版本号会让浏览器产生不同的想法,并再次获取它。解释了其背后的想法。基本上,您可以将上次修改文件的时间戳附加到文件名中,但仍然提供原始文件。这样,每次保存CSS文件的新版本时,文件名都会更改,这将迫使浏览器下载新版本。这将适用于多种文件,包括CSS和JS文件。(使用文件名的替代方法是使用查询字符串。) ASP.NET示例如下所示:
public static string GetBreaker(string fileName)
{
string cacheBreaker = null;
try
{
if (fileName.StartsWith("~"))
{
fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName.Remove(0));
}
cacheBreaker = File.GetLastWriteTime(fileName).ToFileTime().ToString();
}
catch { }
return string.IsNullOrEmpty(cacheBreaker) ? string.Empty : string.Format("?cachebreaker={0}", cacheBreaker);
}
您在母版页中以以下方式调用此方法:
<link href="<%= this.ResolveClientUrl("~/CSS/style.css") %><%=CacheBreaker.GetBreaker("~/CSS/style.css") %>"
rel="stylesheet" type="text/css" />
如果你想知道它是如何完成的,他们在上一篇博文中很快提到了这一点:它是由他们的构建过程自动完成的。(第三点)
遗憾的是,没有详细信息,但您可以通过评论该博客文章或联系stackoverflow团队来获得更多信息。每次更改文件名时,只需更改文件名即可获得相同的效果
file001.css
file002.css
我有一种感觉,保持文件名不变并添加
?ver=1234
是为了使源代码管理更容易。所以当文件复制到那里时,它的物理文件名是什么?“all.min.css?v=2383”?我知道它是用来防止cachingIt与文件无关。它只是添加在页面的代码中。文件名仍然是all.min.cs,这并不会真正阻止缓存,但每次更改数字时,页面都会再次加载,因为它是一个新的URL。但是,旧的URL仍然被缓存。这是正确的答案。请参阅前面的问题以获得解释:那么在这种情况下是什么?动态生成?几乎肯定不是,正如我在回答中所描述的