C# 使用应用程序_BeginRequest+;重新使用

C# 使用应用程序_BeginRequest+;重新使用,c#,caching,browser-cache,durandal,C#,Caching,Browser Cache,Durandal,这段代码在javascript版本控制中会起作用吗 protected void Application_BeginRequest(object sender, EventArgs e) { var request = HttpContext.Current.Request; var uri = request.Url; var url = request.Url.ToString(); if (url.EndsW

这段代码在javascript版本控制中会起作用吗

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var request = HttpContext.Current.Request;
        var uri = request.Url;
        var url = request.Url.ToString();

        if (url.EndsWith(".js") || url.EndsWith(".css") || url.EndsWith(".html") || url.EndsWith(".ts"))
        {
            var v = Assembly.GetExecutingAssembly().GetName().Version;
            var newUrl = uri.LocalPath + "?version=" + v;

            Console.WriteLine(string.Format("changing {0} to {1}", url, newUrl));

            HttpContext.Current.Response.Redirect(newUrl);
        }
    }
尝试访问时,浏览器将重定向到。当服务器的版本更改时,clientbrowser中的Java脚本是否会失效


谢谢,

是的,确实会,更改URL的任何部分都会导致浏览器关闭并获取资源,其中包括查询字符串的任何部分。您可能可以自己检查其中一些,例如查看Chrome developer tools中的“网络”选项卡:

这里的
304
状态代码意味着该项尚未在服务器上修改,因此浏览器可以从缓存中获取。此外,您可以看到上面的请求实际上是从缓存加载的


有一篇很好的文章介绍了如何修改查询字符串,以在文件中包含上次修改的日期,这意味着自动自由版本控制。

如果是,那太好了,我使用了应用程序\u BeginRequest+重定向,这就是为什么我担心它无法工作的原因。客户端浏览器上的链接仍处于格式。然后,当客户端请求.js文件时,应用程序_BeginRequest会将其重定向到带有“”version=1.0.0.*.@VJPPaz:啊,对不起,我误解了。我还以为你在写JavaScript。这可能不起作用,因为如果浏览器认为它可以从缓存中获取,它将永远不会命中服务器进行重新定向。我想改为修改你的JS包含——这是解决这个问题的典型方法。