Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 上载大于最大正文长度限制的表单文件时,如何优雅地处理中止的连接?_C#_.net_Asp.net Core_Kestrel Http Server_Kestrel - Fatal编程技术网

C# 上载大于最大正文长度限制的表单文件时,如何优雅地处理中止的连接?

C# 上载大于最大正文长度限制的表单文件时,如何优雅地处理中止的连接?,c#,.net,asp.net-core,kestrel-http-server,kestrel,C#,.net,Asp.net Core,Kestrel Http Server,Kestrel,我们的应用程序有一个端点,允许使用表单数据上传文件。下面是代码的一个最简单的工作示例(FileWrapper是一个只有一个IFormFile类型属性的类): 但是10次中有9次我们没有得到这个响应,相反,我们只是收到一个EconReset错误。应用程序本身并没有对此进行任何记录,它只是说它返回了预期的400响应。现在,在阅读了kestrel的文章后,这似乎是出于设计——应用程序发现正在上载的文件超过了最大体大小限制,并返回错误响应,但客户端仍然继续上载文件,在一段宽限期后,kestrel终止了该

我们的应用程序有一个端点,允许使用表单数据上传文件。下面是代码的一个最简单的工作示例(FileWrapper是一个只有一个IFormFile类型属性的类):

但是10次中有9次我们没有得到这个响应,相反,我们只是收到一个EconReset错误。应用程序本身并没有对此进行任何记录,它只是说它返回了预期的400响应。现在,在阅读了kestrel的文章后,这似乎是出于设计——应用程序发现正在上载的文件超过了最大体大小限制,并返回错误响应,但客户端仍然继续上载文件,在一段宽限期后,kestrel终止了该连接。通过观察线鲨的踪迹证实了这一点 我可以看到,在服务器以400响应后,仍在上载文件块

我知道一个解决方案是将最大身体大小增加到任意大的数字,然后自己执行文件大小验证,但这是否意味着一个人可以连续上传非常大的文件,服务器必须先下载整个文件,然后才能验证它是否允许某种拒绝服务攻击

那么,有没有办法优雅地处理这种情况(而不必处理连接重置)?是否需要在调用这些端点的HttpClient端进行配置?或者是否有其他方法验证上传的文件大小

        [HttpPost]
        public async Task<IActionResult> UploadFile([FromForm] FileWrapper request)
        {
            string filePath = Path.GetTempFileName();
            using (FileStream stream = System.IO.File.Create(filePath))
            {
                await request.File.CopyToAsync(stream).ConfigureAwait(false);
            }

            return Ok();
        }
{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "00-c0c15c847ec89646b48ac1d95b43e77b-18aee69b90ddff45-00",
    "errors": {
        "": [
            "Failed to read the request form. Request body too large."
        ]
    }
}