【问题标题】:ASP.NET Request.Files empty with bad connection onlyASP.NET Request.Files 为空,仅连接不良
【发布时间】:2021-06-21 08:45:39
【问题描述】:

我有一个文件上传页面,允许上传多个文件。

当我在连接良好的情况下使用它时,它工作正常:对于每个单独的文件,我的控制器操作都会被调用,Request.Files 确实包含一个文件。

但是,当我使用开发工具(GPRS 速度)模拟不良连接时,当调用我的控制器操作时,Request.Files 为空。

我也尝试了中等连接 (3G),我得到了两者的混合:两个文件已成功上传,我确实在 Request.Files 中为每个文件创建了一个文件,而另外两个文件以 @987654324 失败@ 为空。

这是正常行为吗?我想知道的是我的代码是否有问题,或者我是否在浪费时间尝试修复无法避免的问题。

我看到的关于这个问题的所有问题都表明我应该为表单的enctype 属性指定multipart/form-data,但这不是我的问题的解决方案,因为它在良好的连接下工作得很好。

谢谢。

编辑:

@Gunnarhawk,这就是我执行 AJAX 调用的方式:

return $.ajax({
    url: '@Url.Action("GetUploadedFileList", "Process", new { claimId = @claimId })',
    method: 'POST',
    contentType: "application/json; charset=utf-8",
    dataType: 'html',
    cache: false,
    data: dataJson, // Object as JSON text
    processData: false,
    traditional: true,
    success: function (response) {
        // Stuff...
    },
    error: function () {
        // Stuff...
    }
});

【问题讨论】:

  • 请求不通过时得到什么状态码,会不会超时?另外,您说这可能是您的代码有问题。可以发一下吗?
  • @Gunnarhawk 好吧,看起来 in 没有返回任何代码。尽管查询确实有持续时间和开始/结束时间,但开发人员工具不指示任何代码,而那些有效的代码为 200。不幸的是,我无法发布我的整个代码,因为它是一个与信用卡相关的网站,但我想我可以发布一部分 JS,因为它可以从浏览器中看到。

标签: javascript c# asp.net ajax asp.net-mvc


【解决方案1】:

您可以尝试增加执行超时或最大请求长度(以允许更大的文件上传并使页面运行更长时间)。

<httpRuntime maxRequestLength="byte size limit" executionTimeout="timeout in seconds" />

docs on maxRequestLength

以千字节为单位的最大请求大小。默认大小为 4096 KB (4 MB)。

还有docs on executionTimeout

一个 TimeSpan 值,指示请求的允许执行时间。

我相信 executionTimeout 的时间是以秒为单位的,所以如果你将它设置为 300,那就是 5 分钟。

这样做可能会导致恶意用户通过尝试上传非常大的文件来攻击公共应用程序,因此请注意。

您可以使用&lt;location href="path"&gt; 元素将更改范围限定为应用程序中的特定页面。查看更多地点in the Microsoft Docs

【讨论】:

  • 感谢您的建议,但我相信它与长度无关,因为它在使用良好连接时有效。关于超时,jQuery 需要毫秒,所以我尝试了 120000(2 分钟),但遇到了同样的问题。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2014-12-28
  • 2021-05-20
  • 2022-01-18
  • 2012-02-13
  • 1970-01-01
  • 2020-06-07
相关资源
最近更新 更多