如何在 ScriptBundle for .NET MVC (4.7.2) 应用程序中包含 SRI 哈希?

Posted

技术标签:

【中文标题】如何在 ScriptBundle for .NET MVC (4.7.2) 应用程序中包含 SRI 哈希?【英文标题】:How can I include SRI hash in ScriptBundle for .NET MVC (4.7.2) application? 【发布时间】:2021-07-15 12:54:25 【问题描述】:

目前我的包正在使用公共库的本地副本。

bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/moment.min.js",
                      "~/Scripts/bootstrap-datetimepicker.min.js",
                      "~/Scripts/respond.js"));

我想转换为使用 CDN,并希望通过包含哈希值来确保我遵守 SRI。我发现很多关于在捆绑配置中使用 CDN 的文章,但没有关于如何在捆绑时包含 SRI 哈希和跨域标记。

请帮助我。

【问题讨论】:

【参考方案1】:

试试下面的代码:

bundles.UseCdn = true; bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js").Include( "~/Scripts/jquery-version.js"));

并以 debug="false" 模式运行您的应用程序或使用 BundleTable.EnableOptimizations = true;

【讨论】:

这不会产生所需的哈希值。【参考方案2】:

试试这个:

 public static void RegisterBundles(BundleCollection bundles)
 
    BundleTable.EnableOptimizations = true;
    string version = string.Format("0", DateTime.Now.ToString("yyyyMMddHHmmss"));
    bundles.UseCdn = true;
    var cdnUrl = "CDN url"+ "0?" + version;
    
    bundles.Add(new ScriptBundle("~/bundles/bootstrap", string.Format(cdnUrl, "bundles/bootstrap")).Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/moment.min.js",
                      "~/Scripts/bootstrap-datetimepicker.min.js",
                      "~/Scripts/respond.js"));
 
 

并在Global.asax.cs 内的Application_BeginRequest 中添加此行以允许跨域

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "CDN url");

【讨论】:

请您解释一下

以上是关于如何在 ScriptBundle for .NET MVC (4.7.2) 应用程序中包含 SRI 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

.NET MVC中关于ScriptBundle导致jquery 模态框未正常执行的问题

ASP.NET ScriptBundle 不适用于 .min.js?

ScriptBundle 在调试模式下添加完整文件和缩小文件

找不到类型或命名空间名称“ScriptBundle”(您是不是缺少 using 指令或程序集引用?)

如何在asp.net核心的for循环中使用linqkit

如何在Windows上使用Python for .NET进行多处理?