c# - 如何强制 ScriptManager 通过 SSL 提供 CDN 脚本

标签 c# asp.net ssl cdn scriptmanager

我们在网络场上提供了一个网站。该场位于处理加密的 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/

相关文章:

c# - 通过保留点位置进行 3D 表面重建

c# - 为现有网站创建母版页的指南

ASP.NET 显示错误详细信息

c# - ASP.Net 中的持久动态控件

c# - session 未在页面之间传递c#

java - 配置 SSL 以在 Tomcat 5.5 服务器上使用 Java Web 应用程序

c# - 虚拟方法逻辑不工作 C# .NET 4.0

c# - 使用 Linq 更新主表时更新子记录的有效方法

javascript - 我们如何使用 Javascript 在浏览器中调用 SSL 证书弹出窗口?

apache - 帮助设置特定链接到 HTTP 和 HTTPS