在我未处理的异常日志记录中,我偶尔会在给定页面上看到此错误。我没有在页面上以编程方式创建的任何控件或将任何按钮数据绑定到页面上。
在我的日志记录中,我抓住当前处理程序,这是我知道页面的位置和堆栈跟踪,但是堆栈跟踪没有给出任何有意义的东西,因为它只是说它归结为Page.ProcessPostData。
有没有办法可以记录更有意义的数据?比如它发布了什么以及它预期会发布什么?
我无法在任何地方重现这一点。
答案 0 :(得分:3)
您可以看到所有请求的表单参数,如下所示:
if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request != null) {
foreach (string key in System.Web.HttpContext.Current.Request.Form.Keys) {
if (key.IndexOf("__VIEWSTATE") == -1) {
//key: key
//value: System.Web.HttpContext.Current.Request.Form[key]
}
}
}
答案 1 :(得分:2)
此问题的常见原因是用户在执行导致回发的操作之前不等待整个页面呈现。这个页面有多大?用户是否感到不耐烦?
我看到的另一个地方是带有回传控件的转发器/模板化控件 - 就像转发器项目模板中的按钮 - 在回发之后错误地数据绑定而不是仅仅一次。然而,这将一直失败所以似乎不太可能。
我不确定如何从异常中获取更多信息......你是如何开始捕捉它的?当发生此异常时,我认为Page对象本身并未实例化,因此您可能必须使用自定义HttpModule。你可以在ProcessRequest周围试一试吗?这应该可以让您访问Request对象和发布的数据。