环境:
1)在虚拟(VM)盒的Windows 2008中的IIS7中托管的.NET Framework 4.0 Web应用程序。此应用程序使用未由其他Web应用程序共享的应用程序池。 2)服务器不在Web场中运行。 3)Web.config设置:
authentication mode = "Forms"
requireSSL = "true"
enableViewState = "true"
enableViewStateMac = "true"
viewStateEncryptionMode = "Always"
machineKey validationKey = "AutoGenerate,IsolateApps", decryptionKey = "AutoGenerate,IsolateApps" validation = "AES" decryption = "Auto"
4)如果浏览器是XP,FireFox 19.0.2,Chrome或Safari中的IE8.0.6001,则不会出现如下所述的错误。但是,如果客户端是Windows IE或Windows 2008中的IE IE8.0.7601或9,则会发生错误。
错误:
1)Web应用程序本身记录的错误:System.Web.HttpException(0x80004005):无法验证数据。 at System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt,Byte [] buf,Byte [] modifier,Int32 start,Int32 length,Boolean useValidationSymAlgo,Boolean useLegacyMode,IVType ivType)at System.Web.UI.ObjectStateFormatter.Deserialize( String inputString)
2)Windows日志中显示的错误是:Viewstate验证失败。原因:视图状态提供了完整性检查失败。
分析:
我在machine.config文件中使用特定键而不是自动生成validationKey和decryptionKey,仍然会出现错误。但是,如果更改设置,则不会发生错误:enableViewStateMac =“false”和viewStateEncryptionMode =“Never”。但我不需要这些设置,因为它们会带来安全风险。然而,当浏览器在win 2008和win 7中达到IE 8.0.7601或更高版本时,似乎问题来自视图状态加密和解密。如果您能给出一些建议,我们将非常感激。