首页 > 解决方案 > 如何在 asp.net core 2+ 中增加上传大小?请求的实体太大

问题描述

我想在 ASP.NET Core 2.0 Web 应用程序中增加 30MB 的默认上传大小。建议的解决方案,例如添加 [RequestSizeLimit(4_100_000_000)] 或添加

services.Configure<FormOptions>(x => x.MultipartBodyLengthLimit = 4074790400);

不能在 asp.net core 2.0 中工作。我猜这些解决方案适用于 .NET Core 1+ 版本。

我还将这个添加到 Program.cs 中,这也是建议的解决方案:

   public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options =>
            {
               options.Limits.MaxRequestBodySize = 4120100000;
            })
            .Build();

虽然在本地 - 使用 Visual Studio docker 调试器,我能够上传大于 30 MB 的文件,但在 AWS 环境中,我再次收到 413 Request Entity Too Large 错误。

标签: c#amazon-web-servicesdockerasp.net-core

解决方案


在 aws 18.04 ubuntu 上遇到了同样的问题,运行 .net core 2.2 和 nginx 1.16.1 作为前端服务器和反向代理。

通过做两件事解决了这个问题:

1)配置 nginx 的最大请求大小- 确保前端 nginx 不会阻止请求到达反向代理后面的应用程序。为此,我添加了 'adding client_max_body_size 30M; ' 在服务器块内,但还有更多方法可以做到这一点,请参阅:https ://www.tecmint.com/limit-file-upload-size-in-nginx/ )

2) 向 Main 添加相同的代码,有 1 个小的变化 - 我没有指定请求大小,而是插入了一个空值,这导致 kestrel 假定它是最大可能值 (afaik)

 public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options =>
            {
               options.Limits.MaxRequestBodySize = null;
            })
            .Build();

推荐阅读