C# 上载大于最大正文长度限制的表单文件时,如何优雅地处理中止的连接?
我们的应用程序有一个端点,允许使用表单数据上传文件。下面是代码的一个最简单的工作示例(FileWrapper是一个只有一个IFormFile类型属性的类): 但是10次中有9次我们没有得到这个响应,相反,我们只是收到一个EconReset错误。应用程序本身并没有对此进行任何记录,它只是说它返回了预期的400响应。现在,在阅读了kestrel的文章后,这似乎是出于设计——应用程序发现正在上载的文件超过了最大体大小限制,并返回错误响应,但客户端仍然继续上载文件,在一段宽限期后,kestrel终止了该连接。通过观察线鲨的踪迹证实了这一点 我可以看到,在服务器以400响应后,仍在上载文件块 我知道一个解决方案是将最大身体大小增加到任意大的数字,然后自己执行文件大小验证,但这是否意味着一个人可以连续上传非常大的文件,服务器必须先下载整个文件,然后才能验证它是否允许某种拒绝服务攻击 那么,有没有办法优雅地处理这种情况(而不必处理连接重置)?是否需要在调用这些端点的HttpClient端进行配置?或者是否有其他方法验证上传的文件大小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终止了该
[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."
]
}
}