我们如何在 MVC5 中为 Bundle 启用缓存
How can we enable caching for Bundles in MVC5
我在我的 mvc 项目中创建了 2 个包,如下所示:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/BaseScripts").Include(
"~/Content/js/jquery-{version}.js",
"~/Content/js/jquery-ui-{version}.js",
"~/Scripts/jquery.unobtrusive-ajax.min.js",
"~/Content/js/bootstrap.js",
"~/Content/js/bootstrap-datepicker.js",
"~/Scripts/jquery.validate.min.js",
"~/Scripts/jquery.validate.unobtrusive.js",
"~/Scripts/customvalidation.js"
)
);
bundles.Add(new ScriptBundle("~/Scripts/CustomScripts").Include(
"~/Content/js/customscripts/commonscript.js",
"~/Content/js/customscripts/registration.js"
));
bundles.Add(new StyleBundle("~/Styles/Css").Include(
"~/Content/css/bootstrap.min.css",
"~/Content/css/ymobiz.css",
"~/Content/css/Style.css",
"~/Content/css/datepicker3.css",
"~/Content/font-awesome-4.1.0/css/font-awesome.min.css",
"~/Content/css/css.css"
));
//To enable bundling and minification
BundleTable.EnableOptimizations = true;
}
现在我还需要为这些文件启用缓存。有什么方法可以控制这些捆绑文件的缓存持续时间
MVC 包作为单个静态文件返回给缓存时间默认设置为 1 年的浏览器。 ASP.NET MVC 负责跟踪您的捆绑包文件并更改捆绑包 url 如果任何文件的内容发生更改或正在从捆绑包中添加/删除文件。
由于包已经被缓存并且更改跟踪由 asp.net mvc 框架维护,您还希望对这些包进行什么缓存控制?
编辑(回应评论)
很遗憾,您无法更改该限制。缓存限制由 BundleHandler
class 的 ProcessRequest
方法处理,这是 internal sealed
,因此您不可能继承 \ 覆盖这些请求。
有关详细信息,您可以 refer this question。
在网络配置中添加密钥
<appSettings>
<add key="Version" value="sa291988" />
</appSettings>
创建一个 class,我们在其中定义 JavaScript 和样式的格式。
使用 System.Configuration;
namespace BundlingSample
{
public class SiteKeys {
public static string StyleVersion {
get {
return "<link href=\"{0}?v=" +
ConfigurationManager.AppSettings["version"] + "\" rel=\"stylesheet\"/>";
}
}
public static string ScriptVersion {
get {
return "<script src=\"{0}?v=" +
ConfigurationManager.AppSettings["version"] + "\"></script>";
}
}
}
}
@Styles.RenderFormat(SiteKeys.StyleVersion,"~/Content/css")
@Scripts.RenderFormat(SiteKeys.ScriptVersion,"~/bundles/jquery")
我在我的 mvc 项目中创建了 2 个包,如下所示:
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/BaseScripts").Include(
"~/Content/js/jquery-{version}.js",
"~/Content/js/jquery-ui-{version}.js",
"~/Scripts/jquery.unobtrusive-ajax.min.js",
"~/Content/js/bootstrap.js",
"~/Content/js/bootstrap-datepicker.js",
"~/Scripts/jquery.validate.min.js",
"~/Scripts/jquery.validate.unobtrusive.js",
"~/Scripts/customvalidation.js"
)
);
bundles.Add(new ScriptBundle("~/Scripts/CustomScripts").Include(
"~/Content/js/customscripts/commonscript.js",
"~/Content/js/customscripts/registration.js"
));
bundles.Add(new StyleBundle("~/Styles/Css").Include(
"~/Content/css/bootstrap.min.css",
"~/Content/css/ymobiz.css",
"~/Content/css/Style.css",
"~/Content/css/datepicker3.css",
"~/Content/font-awesome-4.1.0/css/font-awesome.min.css",
"~/Content/css/css.css"
));
//To enable bundling and minification
BundleTable.EnableOptimizations = true;
}
现在我还需要为这些文件启用缓存。有什么方法可以控制这些捆绑文件的缓存持续时间
MVC 包作为单个静态文件返回给缓存时间默认设置为 1 年的浏览器。 ASP.NET MVC 负责跟踪您的捆绑包文件并更改捆绑包 url 如果任何文件的内容发生更改或正在从捆绑包中添加/删除文件。
由于包已经被缓存并且更改跟踪由 asp.net mvc 框架维护,您还希望对这些包进行什么缓存控制?
编辑(回应评论)
很遗憾,您无法更改该限制。缓存限制由 BundleHandler
class 的 ProcessRequest
方法处理,这是 internal sealed
,因此您不可能继承 \ 覆盖这些请求。
有关详细信息,您可以 refer this question。
在网络配置中添加密钥
<appSettings>
<add key="Version" value="sa291988" />
</appSettings>
创建一个 class,我们在其中定义 JavaScript 和样式的格式。 使用 System.Configuration;
namespace BundlingSample
{
public class SiteKeys {
public static string StyleVersion {
get {
return "<link href=\"{0}?v=" +
ConfigurationManager.AppSettings["version"] + "\" rel=\"stylesheet\"/>";
}
}
public static string ScriptVersion {
get {
return "<script src=\"{0}?v=" +
ConfigurationManager.AppSettings["version"] + "\"></script>";
}
}
}
}
@Styles.RenderFormat(SiteKeys.StyleVersion,"~/Content/css")
@Scripts.RenderFormat(SiteKeys.ScriptVersion,"~/bundles/jquery")