我有一个动态生成的javascript文件,我想确保它永远不会被浏览器缓存。我目前的方法是在每个页面视图的script标签中简单地附加一个(新的) guid到url。
例如:
<script type="text/javascript" src="/js/dynamic.js?rand=979F861A-C487-4AA8-8BD6-84E7988BD460"></script>我的问题is...is这是实现我目标的最好方法吗?
作为参考,我使用的是ASP.NET MVC2,javascript文件是作为控制器操作的结果生成的。
发布于 2010-07-17 18:30:27
你的方法运行得很好,另一种方法是使用DateTime.UtcNow.Ticks。当然,您也可以使用cache control headers,但如果您想绝对确定,您所使用的方法就是最佳选择。
但是,如果您无论如何都是动态生成文件,并且需要将其包含在page...any中,那么为什么不只是将JavaScript粘贴到页面中呢?由于您希望它永远不缓存,这将为客户端节省一次往返。
发布于 2010-07-17 18:34:20
您可以创建自定义操作属性:
public class NoCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var cache = filterContext.HttpContext.Response.Cache;
cache.SetExpires(DateTime.UtcNow.AddDays(-1));
cache.SetValidUntilExpires(false);
cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
cache.SetCacheability(HttpCacheability.NoCache);
cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
}然后用这个属性修饰生成javascript的控制器操作:
[NoCache]
public ActionResult MyAction()
{
...
}在这种情况下,您不再需要附加的随机字符串。
发布于 2010-07-17 18:31:05
是的那很好。我个人也是这样做的,但我使用的是时间戳,这确保了它始终是唯一的。
https://stackoverflow.com/questions/3271098
复制相似问题