我正在尝试调试一段MVC代码,当我遇到断点时,我看到它在名为VMnnn
的动态脚本文件中被击中。我尝试了所有操作,CTRL + F5,使用菜单清除浏览器缓存,并清除ASP.NET临时文件,并停止了IIS Express。但是,动态脚本文件与实际脚本仍然过时,真实脚本在视图的Razor代码中内联。
如何强制更新此动态脚本文件?或者,如果它不仅在内存中,我是否可以找到并删除此动态文件。
答案 0 :(得分:1)
根据客户端的设置,即使使用GET方法和相同的参数访问页面,有时客户端(尤其是Web视图)也可以缓存页面内容,尽管该页面应该是动态的。其他人提到的传递随机GET参数的建议也可能阻止客户端缓存,但是您不必控制客户端的请求。在这种情况下,您可以尝试的一件事是在控制器的action方法内添加以下行:
Response.AppendHeader("Cache-Control", "no-cache");
或者,您可以编写如下属性:
public class NoCacheAttribute : FilterAttribute, IActionFilter {
public void OnActionExecuted(ActionExecutedContext filterContext) {
filterContext.RequestContext.HttpContext.Response.AppendHeader("Cache-Control", "no-cache");
}
public void OnActionExecuting(ActionExecutingContext filterContext) { }
}
并将[NoCache]
属性添加到所需的控制器或操作中。这将通知客户端该页面不应该被缓存。客户端可能仍然会忽略此标头,这再次取决于其设置,但是大多数客户端的默认行为都应使用此方法。
答案 1 :(得分:0)
您可以使用Math.random()
通过JavaScript生成随机字符串并将其转换为字符串(或者,然后可以删除toString()
生成的非单词字符)。
下一步,我们动态创建一个脚本标签,并将随机字符串分配给src
属性的查询部分。
我们会随时将标签插入您的身体或头部。 appendChild
,write
等
// Create a random string
let random = (Math.random() * 10000).toString(12)
// Generate the script tag
let script = document.createElement('script')
script.src = `http://example.com/js/myfile.js?${random}`
// Place the script tag somewhere.
document.body.appendChild(script)