asp.net - HTTPS 安全性受到 ASP.NET Ajax 客户端框架的影响
问题描述
我的 aspx ASP.NET 网页中有一个 ScriptManager。
如果我使用以下
<asp:ScriptManager EnablePartialRendering="true" AsyncPostBackTimeOut="300"
ID="ScriptManager1" runat="server" />
我在浏览器中看到以下错误
未捕获的错误:无法加载 ASP.NET Ajax 客户端框架。未捕获的 ReferenceError:未定义 Sys
当我添加时EnableCdn="true"
,我收到有关混合内容的警告
HTTPS 安全性受到http://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js ... 和http://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.debug.js的威胁
当然,如果我强制加载,它最终会起作用,但这远非理想。
我也不明白在从 Windows Server 2012 移植到具有 IIS 8 和 10 各自版本的 Windows Server 2016 时问题是如何出现的。显然,在原始服务器中,相同的代码可以正常工作 - 即使没有EnableCdn="true"
- 以及所有这些请求似乎按预期在 https 中进行管理。
接受解决方案后
几乎一切顺利。我所做的是在里面添加以下几行Global.asax.cs
:
protected void Application_Start(object sender, EventArgs e)
{
//....
var defAjaxForms = new ScriptResourceDefinition();
defAjaxForms.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjaxWebForms.debug.js";
defAjaxForms.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjaxWebForms.debug.js";
defAjaxForms.CdnSupportsSecureConnection = true;
defAjaxForms.Path = "~/Scripts/WebForms/MicrosoftAjaxWebForms.debug.js";//local resource
defAjaxForms.DebugPath = "~/Scripts/WebForms/MicrosoftAjaxWebForms.debug.js";
ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjaxWebForms.js", defAjaxForms);
var defAjax = new ScriptResourceDefinition();
defAjax.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.js";
defAjax.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/MicrosoftAjax.js";
defAjax.CdnSupportsSecureConnection = true;
defAjax.Path = "~/Scripts/WebForms/MicrosoftAjax.js";//local resource
defAjax.DebugPath = "~/Scripts/WebForms/MicrosoftAjax.js";
defAjax.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer";
ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjax.js", defAjax);
var defForms = new ScriptResourceDefinition();
defForms.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js";
defForms.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js";
defForms.CdnSupportsSecureConnection = true;
defForms.Path = "~/Scripts/WebForms/WebForms.js";
defForms.DebugPath = "~/Scripts/WebForms/WebForms.js";
defForms.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer";
ScriptManager.ScriptResourceMapping.AddDefinition("WebForms.js", defForms);
}
唯一仍然是 KO 是WebForms.js
:我仍然得到
...已通过 HTTPS 加载,但请求了不安全的脚本“ http://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js ”。此请求已被阻止;内容必须通过 HTTPS 提供。
最终解决方案
最后我应用了这个答案(注意他们定义ResourceName
andResourceAssembly
而不是Path
and DebugPath
)全部http://
替换为https://
解决方案
ScriptManager
您可以在 Code Behind中配置映射。像这样的东西。Page_PreRender
是它的好地方。
Dim def As New ScriptResourceDefinition()
def.CdnPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnDebugPath = "https://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js"
def.CdnSupportsSecureConnection = True
def.Path = "~/js/lib/MicrosoftAjax.js" ''//local resource
def.DebugPath = "~/js/lib/MicrosoftAjax.js"
def.LoadSuccessExpression = "window.Sys && Sys._Application && Sys.Observer"
ScriptManager.ScriptResourceMapping.AddDefinition("MicrosoftAjax.js", def)
推荐阅读
- angular - 如何识别非常小的 Angular 应用程序中的内存泄漏
- javascript - 如何在反应中使用表格格式的json生成pdf
- php - 将 \u 表情符号字符串转换为电子邮件正文的 utf-8
- docker - 我怎样才能取消黑名单'libnvomx.so',以解决“没有这样的元素工厂'omxh264enc'!”?
- python - python函数的行为不同
- git - 如何防止已删除的标签再次推送到远程 git repo?
- vue.js - 如何从 nuxt 应用订阅 redis 频道
- laravel - 通过 Dynamics 365 在 Laravel 中进行附加身份验证
- groovy - 如何在 Groovy 中打印当前 XML 节点的路径?
- sapui5 - assert.async() 永远不会失败