【发布时间】:2011-08-29 19:45:27
【问题描述】:
我们有一个非常奇怪的问题,我们还不能诊断。我们的应用程序有许多特定的 ASP.NET MVC 操作失败,因为缺少必需的参数:
The parameters dictionary contains a null entry for parameter 'myVariable' of non-nullable type... etc
每一个都是某种 HTTP POST,因此我们希望看到表单数据。在某些情况下,应该有十几个变量。
我们使用 ELMAH 来收集 Web 应用程序中的错误,通过此工具,您通常可以查看在请求失败期间发布的实际表单数据。然而,在这些特定的 errpr 中,当应该有几个变量时,整个表单都丢失了!
我们根本无法按需复制。然而,随着我们应用程序的流量很大,我们每天会看到几十次这些错误。用户也无法重现该错误,并且在 Web 浏览器中尝试相同的操作再次起作用。
我们也不能 100% 确定数据丢失的位置。它在网络浏览器中吗?在 IIS 管道内部?还是 ASP.NET MVC 转储它?完全不确定。
如果有人可以帮助我们解决和/或诊断此问题,我们将不胜感激。
更新 1:我们发现 HTTP 标头中指定的内容长度的大小表明请求中有一些内容。但是,请求中的表单集合是空的(根据 ELMAH)。因此,我们添加了一些额外的日志记录来跟踪接收到的内容的实际长度和内容本身。
更新 2:我们发现,虽然 CONTENT_LENGTH HTTP 标头的大小正确(对于类似的请求),但内容本身却丢失了。该流包含 0 个字节。
我们还能够将问题缩小到 Internet Explorer,但我们似乎无法在其他浏览器上发生这种情况。
我们有时可以通过在浏览器中引发多个重叠的 AJAX 请求,然后刷新或重定向来重现问题。几乎就像 Internet Explorer 在完全写出流缓冲区之前关闭连接一样。
我们无法使用 Fiddler 追踪这一点。使用 Fiddler,似乎无法重现特定情况。
更新 3:我们所看到的一切都可以这样解释:Why does Internet Explorer not send HTTP post body on Ajax call after failure?
【问题讨论】:
-
这听起来像是一个机器人正在访问您的网站。
-
不是机器人,他们是经过身份验证的用户(我们可以通过 cookie 判断)。当它为他们出错时,用户会抱怨,我们会追溯到这些错误。
标签: asp.net html internet-explorer http-post forms