无效的viewstate错误 - OnPreRender

时间:2010-01-19 16:56:45

标签: asp.net viewstate

我使用System.Web.HttpException在我的网站上每天收到100多个错误:无效的viewstate。

该网站是在iis6上运行的asp.net 3.5,不是在web-garden / web-farm,单一服务器上运行。

以下是一些示例错误。

Machine: ML Framework Version: 2.0.50727.3603 Assembly Version: 6.5.3664.33889 
Source: http://www.domain.com/WebResource.axd?d=z5VmXXoSLLpQHoPictureAlert 
Exception: System.Web.HttpException: Invalid viewstate. at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) 
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Machine: MLFramework Version: 2.0.50727.3603 Assembly Version: 6.5.3664.33889 
Source: http://www.mydomain.com/ScriptResource.axd?d=SE0Ej7OlEAx91j2Cjv_6KkRPplqT-5wB4M7CZPdGdGn3LahLwqlRPApUcdxBsbFXYHZ91Q76FHAHWgHs8SmOC4zemr7
siym0QY0rF3XtJTu%3C/a%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Ca%20id= 
Exception: System.Web.HttpException: Invalid viewstate. at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) at 
System.Web.UI.Page.DecryptString(String s) at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString) at 
System.Web.Handlers.ScriptResourceHandler.ProcessRequestInternal(HttpResponse response, NameValueCollection queryString, 
VirtualFileReader fileReader) at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context) at 
System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) at 
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
  1. 我已经尝试用//<![CDATA[ //]]>
  2. 包装所有内联javascript
  3. 我已经将enableViewStateMac设置为false。
  4. 从查看“d”参数中猜出的所有错误,它似乎专注于我网站上的单个用户控件。 在此控件中,我更改了usercontrol OnPreRender函数中div +文本的可见性。

    protected override void OnPreRender(EventArgs e)
            {
                base.OnPreRender(e);
                PreparePage();
            }
    

    错误是否可以与用户控制行为相关?

    谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的站点在Web场中运行,则可能与使用不同的计算机密钥有关。例如,如果使用一个服务器对视图状态进行编码,则如果没有相同的机器密钥,则另一个服务器将无法对其进行解码。结帐this article。即使您没有多台服务器,也请尝试指定fixed machine keys

答案 1 :(得分:0)

无效的ViewState异常通常来自ASP.NET的内置事件验证。关闭EnableViewStateMac只会停止基于MAC的加密,而不是视图状态验证。为此,您需要在Page指令中设置EnableEventValidation =“false”。

至于为什么会发生......有三个可能的原因:

1)您正在修改客户端控件的内容(例如DropDownList项)。

2)在呈现ViewState验证字段之前,页面正在回发。

3)您的网站是恶意脚本搜索漏洞的目标......在这种情况下,EventValidation正在执行其工作。

我认为#1最有可能......第2号也很常见,特别是当你看到这个错误的时候不一致。