У меня есть ScriptManager на моей ASP.NET веб-странице ASP.NET.
Если я использую следующее
<asp:ScriptManager EnablePartialRendering="true" AsyncPostBackTimeOut="300"
ID="ScriptManager1" runat="server" />
Я вижу следующие ошибки в браузере
Uncaught Ошибка: клиентская структура ASP.NET Ajax не удалось загрузить.
Uncaught 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 на Windows Server 2016 с соответствующими версиями IIS 8 и 10. Видимо, на исходном сервере тот же код работает нормально - даже без 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);
}
Единственное, что все еще нокаутирует это WebForms.js
: я все еще получаю
... был загружен через HTTPS, но запросил небезопасный скрипт
http://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js'. Этот запрос
был заблокирован; содержимое должно быть передано по протоколу HTTPS.
Окончательное решение
Наконец, я применил этот ответ (обратите внимание, что они определяют ResourceName
и ResourceAssembly
вместо Path
и DebugPath
) со всеми http://
, замененными на https://