我开发了一个页面,通过 AJAX 将带有图像的表单发布到 WebAPI2 控制器。
我反复这样做;我让用户选择一堆图像,他们添加到选择框中,然后用户可以从另一个位置添加更多图像,或者他们可以从列表中删除项目。因此,我将他们填写的带有图像的表格提交给服务器。我每张图片专门做一次,这样我就可以显示每张图片上传的进度。一旦图像在服务器上,它就会由我的服务器端代码移动到一个安全的存储库。应用程序池正在使用特定的 AD 帐户来完成它的工作。
这对我很有效,对其他测试过它的人也很有效,但是我有一个测试员——8 人中的一个——在 IE 中遇到间歇性错误。他不会在另一个浏览器中尝试(我们没有实际的测试人员,只有我们的用户,而且这个很固执)
我的服务器端 web api 代码,它是同一个项目的一部分,甚至没有被击中。我记录下我们立即输入了该方法。此外,服务器端的应用程序日志中没有记录错误。AJAX 正在返回“错误”和“0”。没有响应文本。我将所有 AJAX 错误记录到服务器地址(提交就好了,顺便说一句)
我最初是用 MVC 控制器而不是 Web API 编写的,但我希望它能够解决问题。它没。
“提交”表单的按钮不是提交按钮。它是输入=“按钮”。我的表单上没有提交按钮。该表格没有可邮寄的地址。我锁定了整个表单,因此在上传项目时无法单击任何按钮,无法编辑任何元素。总之,我看不到 e.preventDefault(); 会有帮助的。
这实际上不可能是跨站点脚本,而且我在网上找不到任何表明可以随机触发跨站点脚本策略的内容,但似乎确实如此。
有时,他提交表单和 1/3 的图像上传,其余的错误。这不是图像类型、大小或其他任何东西——我复制了他上传的图像并用它们来验证。
我们在服务器端禁用了跨站点脚本,我在我这边添加了一个 JSONP 格式化程序,他测试它没有错误。我们将继续测试它是否真的解决了问题,因为他之前已经解决了问题,然后问题又出现了。
如果确实是跨站点脚本导致它,为什么?由于我没有在我的 ajax 请求中指定一个域,因此 IIS 服务器上是否有某些东西使它选择了不同的顶级域?
$.ajax({
url: getBaseURL() + 'API/FileForm',
type: 'POST',
data: dataString,
cache: false,
contentType: false,
processData: false
})
getBaseURL() 说:
function getBaseURL() {
var baseURL = $("#HiddenCurrentURL").val().trim();
if (baseURL != "/") {
baseURL += "/";
}
return baseURL;
}
随着 HiddenCurrentURL 在我的 _layout 中:
@Html.Hidden("HiddenCurrentURL", Request.ApplicationPath)
任何帮助,将不胜感激。我不确定现在该怎么做。浏览器设置可以做到这一点吗?
编辑:他正在使用 IE 11 - 我和我的其他测试人员也是如此。我和其他一些人也在 Chrome 和 Firefox 中进行了测试。
Edit2:我们禁用了跨站点脚本,问题仍然存在。我认为有趣的是,这个问题似乎只发生在深夜或清晨,在下班时间。我检查了 IIS 组,他们说它运行为“始终在线”...