首页 > 解决方案 > ASP.NET Request.Files 为空,仅连接不良

问题描述

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

当我将它与相当好的连接一起使用时,它工作正常:对于每个单独的文件,我的控制器操作被调用并且Request.Files确实包含一个文件。

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

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

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

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

谢谢你。

编辑 :

@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...
    }
});

标签: javascriptc#asp.netajaxasp.net-mvc

解决方案


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

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

请参阅有关 maxRequestLength 的文档

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

还有关于 executionTimeout 的文档

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

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

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

您可以使用该<location href="path">元素将更改范围限定为应用程序中的特定页面。在 Microsoft Docs 中查看有关位置的更多信息。


推荐阅读