asp.net – 在POST时丢失HTML表单数据
我们有一个非常奇怪的问题,我们尚未能够诊断出来.我们的应用程序有许多特定的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? 解决方法
这可能是一个猜测,但你的行为可能没有对它的[HttpPost]限制,所以不知何故用户通过GET而不是POST来获取它?
我的应用程序中有类似的事情,用户尝试POST到URL,但他们的FormsAuthentication票证已过期,因此他们被重定向到登录页面.但是因为登录页面传递了“ReturnUrl”参数,所以一旦登录它们就被重定向回到它们本来要发布到最初的页面,但这次是使用GET.这会导致您描述的错误,因为显然没有任何POST数据存在.正如我所说,有点猜测…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何在MVC4 WebAPI配置中忽略路由?
- asp.net-mvc – 使用SimpleInjector为AccountController注册
- asp.net – 在同一个域上的两个网站之间共享cookie
- asp.net-mvc – 多选项卡验证无效
- asp.net-mvc – 带参数的MVC redirecttoaction与Area
- asp.net-mvc-3 – Ninject每个会话单身?
- asp.net-mvc – 使用DTO而不是域实体进行ASP.NET MVC 2验证
- asp.net-mvc-3 – 在HttpPost上绑定嵌套模型和MVC3
- asp.net-mvc – 如何使这个ASP.NET MVC控制器更易于测试?
- 将文件路径转换为asp.net核心中的URL
- asp.net-mvc – ASP.NET MVC视图或URL应该有多少
- 如何使用ASP.NET.Core Angular模板添加字体真棒
- asp.net – SignalR并不总是准备好后start().don
- 如何在ASP.Net 4 Razor和Twitter Bootstrap中使用
- Asp.Net GridView EditIndex竞争条件?
- 读写切换切面
- asp.net-mvc – 如何在ASP.NET MVC中要求X.509证
- asp.net – ‘Sys.WebForms.PageRequestManager’
- asp.net-mvc – delphi web服务从.net mvc应用程
- asp.net-mvc – 适用于大型网站的ASP.NET MVC项目