从ASP转换后出现无效ViewState错误.NET 1.1到ASP.净额3.5

Invalid ViewState error after conversion from ASP.NET 1.1 to ASP.Net 3.5

本文关键字:ASP NET 错误 净额 ViewState 转换 无效      更新时间:2023-09-26

[我在下面发布我们的问题和解决方案作为参考。如果您有微软或代表组织关于此问题的官方声明,我会将其标记为答案。否则,我在下面的帖子将作为答案]

问题:

我们参加了ASP。NET 1.1应用程序并将其转换为ASP。净额3.5。当我们双击页面上的某个项目,或者选择该项目并单击"确定"按钮时(两者都会启动相同的后发功能),服务器上的页面处理会因Invalid ViewState错误而停止。

我们所做的调试:这是针对驻留在公司内部网上的程序。由于它的存在。Net 1.1,该程序主要针对Internet Explorer,JavaScript不在其他浏览器上运行。F12开发人员工具在Internet Explorer中打开JavaScript调试控制台。通过使用Visual Studio附加到IIS 7.5进程(w3wp.exe),我们可以查看C#服务器代码错误。

我们发现:网页上有一个名为__EventValidation的隐藏字段。在用Visual Studio检查服务器上的C#错误的基础上,我们发现ASP。Net获取该字段的值,并将其解释为ViewState字段的值(ViewState是一个包含页面信息的编码字符串),该字段位于另一个隐藏字段中(我们可以使用F12开发工具在页面中看到这两个值)。但是-这些页面没有ViewState值-代码中使用"EnableViewState=false"专门禁用了它。

此页面的结构是一个包含.aspx的页面,除了包含子url的iframe之外没有其他数据,该子url用于显示包含数据的页面。

[我在最初的帖子中发布了我们的问题和解决方案,作为参考。如果您有微软或代表组织关于这个问题的官方声明,我会将其标记为答案。否则,这篇帖子将作为答案]

解决方案:

我将web.config文件中名为enableEventValidation的标志设置为false,如下所示:

<pages enableEventValidation="false" viewStateEncryptionMode="Auto">

此标志在1.x框架中不可用。参考:https://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enableeventvalidation(v=vs.90).aspx

我原本以为这是在打开一个安全漏洞,但它只是在恢复。净1.1行为。从上面的链接:"EnableEventValidation属性指示是否应该执行事件验证。默认值为true。Web应用程序可以选择禁用事件验证以恢复到.NET Framework 1.0版本的行为。"

这恢复了原来的功能。

这与广泛报道的Invalid ViewState MAC错误类似。但这是一个不同的错误。我最初在这里找到了web.config更新的解决方案:http://blogs.msdn.com/b/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx-但我们没有将viewStateEncryptionMode设置为"从不",而是将其设置为"自动",它仍然有效。