我在MVC中使用Bundling并具有以下内容:
@Scripts.Render("~/bundles/scripts.js");
当BundleTable.EnableOptimizations = true
呈现为:
<script src="/bundles/scripts.js?v=RF3ov56782q9Tc_sMO4vwTzfffl16c6bRblXuygjwWE1"></script>
当BundleTable.EnableOptimizations = false
呈现为:
<script src="/js/header.js"></script>
<script src="/js/content.js"></script>
<script src="/js/footer.js"></script>
是否可以拦截非优化版本以包含我自己的自定义缓存破坏程序?
例如:
<script src="/js/header.js?v=12345"></script>
<script src="/js/content.js?v=12345"></script>
<script src="/js/footer.js?v=12345"></script>
答案 0 :(得分:5)
为什么需要?在开发中,BundleTable.EnableOptimizations = false
无论如何都没有缓存,而且在生产中你应该 BundleTable.EnableOptimizations = true
也不需要这样的东西。
简短的回答,不是,没有任何内置可以让你做你要求的事情,主要是因为我已经说过的原因:根本不需要这样的功能。
答案 1 :(得分:0)
这是您要寻找的深入解决方案:
要总结缓存破坏的内容,请创建一个实用程序方法,该方法将连接您要缓存破坏的未优化文件的文件创建时间戳。
例如
<script src="@StaticFile.Version("/js/header.js")"></script>
这将产生您想要的东西:
<script src="/js/header.js?v=12345"></script>
缓存清除实用程序方法:
using System.IO;
using System.Web.Caching;
using System.Web.Hosting;
namespace System.Web.Optimization
{
public static class StaticFile
{
public static string Version(string rootRelativePath)
{
if (HttpRuntime.Cache[rootRelativePath] == null)
{
var absolutePath = HostingEnvironment.MapPath(rootRelativePath);
var lastChangedDateTime = File.GetLastWriteTime(absolutePath);
if (rootRelativePath.StartsWith("~"))
{
rootRelativePath = rootRelativePath.Substring(1);
}
var versionedUrl = rootRelativePath + "?v=" + lastChangedDateTime.Ticks;
HttpRuntime.Cache.Insert(rootRelativePath, versionedUrl, new CacheDependency(absolutePath));
}
return HttpRuntime.Cache[rootRelativePath] as string;
}
}
}