javascript - 强制浏览器在 asp.net 应用程序中获取最新的 js 和 css 文件

标签 javascript c# asp.net .net asp.net-mvc

有些浏览器会缓存 js 和 css 文件,除非您强制刷新它们,否则无法刷新它们。什么是最简单的方法。

我刚刚实现了这个似乎有效的解决方案。

在您的页面上声明一个版本变量

  public string version { get; set; }

从 web.config key 获取版本号

 version = ConfigurationManager.AppSettings["versionNumber"];

在您的 aspx 页面中像这样调用 javascript 和样式表

<script src="scripts/myjavascript.js?v=<%=version %>" type="text/javascript"></script>
<link href="styles/mystyle.css?v=<%=version %>" rel="stylesheet" type="text/css" />

因此,如果您在 web.config 中将 version = 1.1 从 1.0 设置为您的浏览器将下载最新的文件,这有望让您和您的用户避免一些挫折。

是否有其他更好的解决方案,或者这是否会导致网站出现任何不可预见的问题?

最佳答案

我通过将最后修改的时间戳作为脚本的查询参数来解决这个问题。

我使用扩展方法完成此操作,并在我的 CSHTML 文件中使用它。 注意:此实现将时间戳缓存 1 分钟,因此我们不会过多地破坏磁盘。

扩展方法如下:

public static class JavascriptExtension {
    public static MvcHtmlString IncludeVersionedJs(this HtmlHelper helper, string filename) {
        string version = GetVersion(helper, filename);
        return MvcHtmlString.Create("<script type='text/javascript' src='" + filename + version + "'></script>");
    }

    private static string GetVersion(this HtmlHelper helper, string filename)
    {
        var context = helper.ViewContext.RequestContext.HttpContext;

        if (context.Cache[filename] == null)
        {
            var physicalPath = context.Server.MapPath(filename);
            var version = $"?v={new System.IO.FileInfo(physicalPath).LastWriteTime.ToString("MMddHHmmss")}";
            context.Cache.Add(filename, version, null,
              DateTime.Now.AddMinutes(5), TimeSpan.Zero,
              CacheItemPriority.Normal, null);
            return version;
        }
        else
        {
            return context.Cache[filename] as string;
        }
    }
}

然后在 CSHTML 页面中:

 @Html.IncludeVersionedJs("/MyJavascriptFile.js")

在呈现的 HTML 中,这显示为:

 <script type='text/javascript' src='/MyJavascriptFile.js?20111129120000'></script>

关于javascript - 强制浏览器在 asp.net 应用程序中获取最新的 js 和 css 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185872/

相关文章:

c# - 在正则内联表达式中访问数据绑定(bind)变量

javascript - ASP .NET MVC Core WEB API 上传文件使用 Angular JS 显示错误

asp.net - React Router 链接到应用程序中的非 React 页面

javascript - 上传到 S3 时错误的 XMLHttpRequest

javascript - Jquery 单击按钮重新加载页面

c# - 语音识别引擎识别器

c# - UWP - TextBox 在 Windows 10 build 14393 中缺少换行符 (\n)

javascript - WebRTC:Firefox 未检测到任何输出设备

javascript - ReactJS 如何为数据库中的数据添加搜索过滤器

c# - 需要有关 RSS Feed 和 wordpress 的帮助