使用像Stackoverflow这样的查询字符串对CSS文件进行版本控制吗?

mmc*_*ole 18 css asp.net-mvc query-string

如果您查看Stackoverflow.com的源代码,您会看到对其css文件的引用是:

<link href="/Content/all.min.css?v=2383" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

这是如何完成的,以便他们可以通过查询字符串传递一个版本并提供正确的CSS文件?

Dav*_*sti 5

本文(PHP/.htaccess示例)解释了它背后的想法.基本上,您可以将上次修改文件的时间戳附加到文件名,但仍然可以提供原始文件.这样,每次保存新版本的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);
}
Run Code Online (Sandbox Code Playgroud)

并以这种方式在MasterPage中调用此方法:

<link href="<%= this.ResolveClientUrl("~/CSS/style.css") %><%=CacheBreaker.GetBreaker("~/CSS/style.css") %>"
            rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)


Óla*_*age 4

这样你的浏览器就不会缓存 css 文件。使用版本号很方便,因为 css 文件在每个版本中都可能发生变化。

这不是调用正确的 css 文件的方法。文件始终是相同的,但版本号会让您的浏览器产生不同的想法并再次获取它。