Ajax 扩展器和网络验证器在迁移到 Win Server 2019 后不工作
Ajax extenders & Net Validators are not working after migration to Win Server 2019
我曾经在 Windows 服务器 2012 R2 上使用 运行 .Net 网站,我将网站移至 2019 服务器,现在所有 Ajax 扩展器和标准验证器都停止工作但仍然代码 运行s 没有问题。我花了很长时间试图找出原因。该网站在服务器内部的本地主机以及我的本地计算机上正常工作,我怀疑 IIS 或 web.config 中可能存在配置错误。当前 Ajax 工具包 dll 版本为 3.0.2
简单javascript工作,页面调试期间没有错误
?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
<system.webServer>
<handlers>
</handlers>
</system.webServer>
<system.web>
<compilation targetFramework="4.5">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
</assemblies>
</compilation>
这是一个可以在本地主机和我的本地计算机上运行但不能通过 IIS 运行的示例
form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator" Text="rdfghbdgh"></asp:RequiredFieldValidator>
<br />
<cc1:ConfirmButtonExtender ID="ConfirmButtonExtender1" runat="server" ConfirmText="hcnccjcj" TargetControlID="Button1"></cc1:ConfirmButtonExtender>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</form>
经过数小时的研究,出现此问题的原因是 Plesk 中的设置。具体来说:大多数 JS 验证依赖于 axd 资源,这些资源会被 Plesk 防火墙中的 ModSecurity 阻止。
要解决此问题:您必须将 ModSecuirty Filtering 设置为 Detection 或 Off 而不是 ON.
希望这对其他人有帮助。
我曾经在 Windows 服务器 2012 R2 上使用 运行 .Net 网站,我将网站移至 2019 服务器,现在所有 Ajax 扩展器和标准验证器都停止工作但仍然代码 运行s 没有问题。我花了很长时间试图找出原因。该网站在服务器内部的本地主机以及我的本地计算机上正常工作,我怀疑 IIS 或 web.config 中可能存在配置错误。当前 Ajax 工具包 dll 版本为 3.0.2
简单javascript工作,页面调试期间没有错误
?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
<system.webServer>
<handlers>
</handlers>
</system.webServer>
<system.web>
<compilation targetFramework="4.5">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
</assemblies>
</compilation>
这是一个可以在本地主机和我的本地计算机上运行但不能通过 IIS 运行的示例
form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator" Text="rdfghbdgh"></asp:RequiredFieldValidator>
<br />
<cc1:ConfirmButtonExtender ID="ConfirmButtonExtender1" runat="server" ConfirmText="hcnccjcj" TargetControlID="Button1"></cc1:ConfirmButtonExtender>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</form>
经过数小时的研究,出现此问题的原因是 Plesk 中的设置。具体来说:大多数 JS 验证依赖于 axd 资源,这些资源会被 Plesk 防火墙中的 ModSecurity 阻止。
要解决此问题:您必须将 ModSecuirty Filtering 设置为 Detection 或 Off 而不是 ON.
希望这对其他人有帮助。