C# 使用.NET Core 3.1上载大于100 MB的文件将导致400(错误请求)
我正在使用.NET Core 3.1创建文件上载 上载大于100 MB的文件时,出现错误: 413请求实体太大 经过各种调查,我通过以下设置避免了413错误:C# 使用.NET Core 3.1上载大于100 MB的文件将导致400(错误请求),c#,asp.net-core-3.1,C#,Asp.net Core 3.1,我正在使用.NET Core 3.1创建文件上载 上载大于100 MB的文件时,出现错误: 413请求实体太大 经过各种调查,我通过以下设置避免了413错误: web.config: <?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="fals
web.config
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<security>
<requestFiltering>
<!-- Handle requests up to 1 GB -->
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
</location>
</configuration>
Program.cs
:
[Route("embed")]
[HttpPost]
[DisableRequestSizeLimit]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult PostEmbed([FromForm] WebPptVoiceEmbedRequest request)
{
Log.NLog.Debug("[Get]:PostEmbed start");
byte[] array;
using (var stream = new MemoryStream())
{
request.File.CopyTo(stream);
array = stream.ToArray();
}
Log.NLog.Debug("[Get]:PostEmbed end");
return File(array, "application/vnd.openxmlformats-officedocument.presentationml.presentation", request.File.FileName);
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = null;
})
.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Debug);
})
.UseNLog();
然而,我仍然得到一个错误
400(请求错误
除了我设置的位置之外,还有其他位置可以设置文件上载容量吗?这很混乱,因为在不同的地方有太多的大小设置 我想先解决它,
如果可能的话,我想知道如何在不使用web.config的情况下解决这个问题
最好的祝愿多部分表单正文允许上载的文件大小有限制 在
UploadController.cs
中,您还需要更改该限制以使其正常工作:
比如:
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 1073741824)]
我不确定web.config在asp.net core中是否有任何意义……你能显示操作的完整签名吗?你能提供一个最小的可复制的示例吗?谢谢你的评论。我写了所有操作。上传的文件按原样返回。对于web.config,我也不认为需要.net core。但有了这个添加,至少413错误消失。@kisetu,400表示错误请求。您从哪里获得文件,可以共享表单键值,还是共享客户端代码?@karney感谢您的评论。如果文件大小较小,进程将正常结束,不会出现任何问题,因此我认为这是服务器端问题。由于客户端是React,因此有许多源代码s、 因此,我认为在提问时发布会有障碍,因此我没有发布。现在返回的文件假定为PowerPoint文件,但其他文件格式将相同。文件的内容没有问题。只要超出大小。我还发布了部分发布的客户端源代码。谢谢您的回复!有一个名为MultipartBodyLengthLimit的设置。我不知道这一点,但当我实现它时,它工作得很好!我非常感谢您!但是,即使我添加此设置,如果我删除web.config,我也会收到一个413错误,还有另一个限制。有没有办法为控制器指定maxAllowedContentLength?只要s我使用IIS,我只能在web.config中指定它吗?请注意。就我在@Panagiotis Kanavos的评论中看到的参考URL而言,似乎IIS需要web.config。@kisetu只有在使用IIS进行部署时才需要。即使如此,您仍然需要配置web应用以允许大请求。是的,您可以根据c配置限制控制器与动作
[HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 1073741824)]