在我未处理的异常日志记录中,我在给定页面上的一天中偶尔会看到此错误。我没有在页面上以编程方式创建的任何控件或将任何按钮数据绑定到页面上。
在我的日志记录中,我获取了当前处理程序,这是我知道页面和堆栈跟踪的地方,但是堆栈跟踪没有提供任何有意义的东西,因为它只是说它归结为 Page.ProcessPostData。
有没有办法可以记录更有意义的数据?就像它发布的内容和预期发布的内容一样?
我永远无法在任何地方重现这个。
在我未处理的异常日志记录中,我在给定页面上的一天中偶尔会看到此错误。我没有在页面上以编程方式创建的任何控件或将任何按钮数据绑定到页面上。
在我的日志记录中,我获取了当前处理程序,这是我知道页面和堆栈跟踪的地方,但是堆栈跟踪没有提供任何有意义的东西,因为它只是说它归结为 Page.ProcessPostData。
有没有办法可以记录更有意义的数据?就像它发布的内容和预期发布的内容一样?
我永远无法在任何地方重现这个。
您可以看到所有请求的表单参数,如下所示:
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]
}
}
}
此问题的常见原因是用户在执行导致回发的操作之前没有等待整个页面呈现。这个页面有多大?用户变得不耐烦了吗?
我看到的另一个地方是带有内部回发控件的转发器/模板化控件——就像转发器项目模板中的按钮——在回发后错误地数据绑定,而不是一次。但是,这将始终失败,因此似乎不太可能。
我不确定如何从异常中获取更多信息......你是如何开始捕捉它的?我认为发生此异常时根本不会实例化 Page 对象本身,因此您可能必须使用自定义 HttpModule。你能在 ProcessRequest 周围放一个 try/catch 吗?这应该使您可以访问 Request 对象和发布的数据。