如何在 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 在调试模式下添加完整文件和缩小文件