我使用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)
//<![CDATA[ //]]>
从查看“d”参数中猜出的所有错误,它似乎专注于我网站上的单个用户控件。 在此控件中,我更改了usercontrol OnPreRender函数中div +文本的可见性。
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
PreparePage();
}
错误是否可以与用户控制行为相关?
谢谢!
答案 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号也很常见,特别是当你看到这个错误的时候不一致。