我们在网络场上提供了一个网站。该场位于处理加密的 SSL 加速器后面。这意味着我们的 IIS 服务器将所有传入连接视为 http,即使用户都通过 https 连接到站点。
我们开始使用 ScriptManager 的 EnableCDN=true 属性。在我们没有 SSL 加速器的开发环境中,对 CDN 上 js 文件的引用是使用 https 呈现的,而在生产环境中,它们是通过 http 不安全地呈现的,这导致 js 被“仅显示安全内容”阻止"错误。
除了手动更新 scriptmanager 中的所有脚本引用或在通过模块输出时重写 HTML 之外,有没有人知道强制 scriptmanager 通过 https 呈现其引用的方法?
编辑:
在做了一些反射器审查之后,我认为这是不可能的。我已经实现了以下黑客攻击,但这显然很脆弱,因为它涉及访问私有(private)字段。如果有人能看到更好的方法,我很乐意听到。
var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic);
if (secureConnectionField != null)
secureConnectionField.SetValue(ScriptManager, true);
最佳答案
如果您使用 ASP.NET 4.0 或更高版本,那么解决方案之一是使用 ScriptManager 控件的 ScriptResourceMapping 功能。
例如在global asax中你可以添加如下代码:
void Application_Start(object sender, EventArgs e) {
// map a simple name to a path
ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition {
Path = "~/scripts/jquery-1.3.2.min.js",
DebugPath = "~/scripts/jquery-1.3.2.js",
CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js",
CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.js"
});
}
因此,如您所见,您可以显式设置 CDN 路径。此外,您可以覆盖标准 Ajax 文件的脚本映射。
更多信息可以在这篇文章中找到:http://weblogs.asp.net/infinitiesloop/archive/2009/11/23/asp-net-4-0-scriptmanager-improvements.aspx
关于c# - 如何强制 ScriptManager 通过 SSL 提供 CDN 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221988/