我们有一个网站在一个网络农场上提供服务。该服务器场位于处理加密的SSL加速器之后。这意味着我们的IIS服务器将所有传入连接视为http,即使用户都通过https连接到站点也是如此。
我们开始使用ScriptManager的EnableCDN=true属性。虽然在我们的开发环境中没有SSL加速器,但是在CDN上对js文件的引用是使用https呈现的,而在生产环境中,它们是通过http不安全地呈现的,这会导致js被阻止,并出现"Only secure content is displayed“错误。
除了手动更新scriptmanager中的所有脚本引用或通过模块重写HTML之外,有谁知道一种强制scriptmanager通过https呈现其引用的方法吗?
编辑:
在做了一些反射器检查之后,我不相信这是可能的。我已经将以下技巧放在适当的位置,但是这显然是脆弱的,因为它涉及访问私有字段。如果有人能看到更好的方式,我很想听听。
var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic);
if (secureConnectionField != null)
secureConnectionField.SetValue(ScriptManager, true);发布于 2012-11-12 00:01:59
如果您使用的是ASP.NET 4.0或更高版本,那么解决方案之一就是使用ScriptManager控件的ScriptResourceMapping功能。
例如,在全局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
发布于 2013-04-10 05:44:42
为了处理与您类似的情况,我将BundleCollection配置为使用CDN和两个不同版本的库进行调试和生产。
这些设置的结果是,调试时将使用非最小化的,而CDN中的最小化的将用于生产。局部最小化的那个被忽略。
[...]
bundles.UseCdn = true;
[...]
var jQueryBundle = new ScriptBundle("~/bundles/jquery");
jQueryBundle.CdnPath = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
jQueryBundle.Include("~/scripts/jquery-1.9.1.js");
jQueryBundle.Include("~/scripts/jquery-1.9.1.min.js");
bundles.Add(jQueryBundle);注意,我没有在CdnPath中指定协议,客户端的浏览器将自动使用客户端连接的当前协议,http或https。
客户端的浏览器将在生产环境中接收到以下标记:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>开发者的浏览器将收到以下标签:
<script src="/Scripts/jquery-1.9.1.js"></script>两者都将在浏览器上使用正确的协议。
发布于 2011-12-15 06:22:33
通常情况下,您的开发服务器和生产服务器将具有不同的IP范围。要求开发团队根据框架dlls中的IP地址应用“协议切换”。
https://stackoverflow.com/questions/8221988
复制相似问题