Я не мог понять, почему Kestrel продолжает закрывать соединение, когда я пытаюсь загрузить большие файлы в него, как только он становится более 30 МБ, если быть точным.
Мне известно, что Kestrel имеет настройку по умолчанию в 30 МБ с точки зрения максимального размера запроса, и я попытался увеличить максимальный размер запроса до 100 МБ в файле web.config:
<security>
<requestFiltering allowDoubleEscaping="true">
<!-- This will handle requests up to 100MB -->
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
Я также пытался настроить его при начальной загрузке сервера:
WebHost.UseKestrel(options => options.Limits.MaxRequestBodySize = 104857600) // 100MB
[...]
services.Configure<FormOptions>(options => options.MultipartBodyLengthLimit = 104857600); // 100MB
Я попытался установить его в промежуточном программном обеспечении:
var maxRequestBodySizeFeature = httpContext.Features.Get<IHttpMaxRequestBodySizeFeature>();
maxRequestBodySizeFeature.MaxRequestBodySize = 104857600;
Я перепробовал все, что смог найти, например то, что предлагается здесь:
Увеличение размера загружаемого файла в ядре Asp.Net
А здесь:
https://www.talkingdotnet.com/how-to-increase-file-upload-size-asp-net-core/
Но как только мой POST-запрос, содержащий несколько файлов, которые вместе превышают предел 30 МБ, выполняется следующая строка:
foreach (var entry in httpContext.Request.Form /* Exception is thrown by Form property */)
{
}
Я получаю следующее исключение:
[Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.ConnectionResetException] - Error -4077 ECONNRESET connection reset by peer
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed()
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.GetResult(ReadResult& result)
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.IReadableBufferAwaiter.GetResult()
at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.ReadableBufferAwaitable.GetResult()
at Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal.LibuvOutputConsumer.<WriteOutputAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.WebUtilities.BufferedReadStream.<EnsureBufferedAsync>d__37.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.WebUtilities.MultipartReaderStream.<ReadAsync>d__36.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.WebUtilities.StreamHelperExtensions.<DrainAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.WebUtilities.MultipartReader.<ReadNextSectionAsync>d__20.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Http.Features.FormFeature.<InnerReadFormAsync>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Http.Features.FormFeature.ReadForm()
[...]
Насколько я знаю, это не браузер, закрывающий соединение. В браузере я просто выбираю кучу файлов и загружаю их, и сразу в Visual Studio выдается исключение. Все сделано в localhost.