如何在asp.net core 2+中增加上传大小?请求实体过大。

6
我想要增加ASP.NET Core 2.0 web应用程序默认上传大小的限制,将其从30MB提高。有一些解决方案可以实现这个目标,例如添加 [RequestSizeLimit(4_100_000_000)] 或者添加

标签。请注意不要改变HTML格式,并且确保翻译通俗易懂,不要太过于专业化。
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请求实体过大的错误。


1
你是否已经看过这个?https://dev59.com/lVYN5IYBdhLWcg3w4br1在.NET Core 2中,可以通过UseKestrel中的options.Limits.MaxRequestBodySize来设置请求体大小限制。 - jAC
@jAC,我刚刚添加了UseKestrel部分,但没有任何效果。 - Neno
1
你是否在使用IIS作为反向代理?如果是,那么你还需要在Web.config中添加请求限制。换句话说,你的Core应用程序没问题,但是在它到达之前,IIS会将其阻止。 - Chris Pratt
@ChrisPratt,说得好!实际上这是一个Docker化的Web应用程序,并且添加了.UseKestrel(options => { options.Limits.MaxRequestBodySize = 4120100000; })使其在Visual Studio Docker环境中工作,但在AWS中不起作用。 - Neno
你是如何运行Docker容器的?使用EKS、ECS等吗?我明天会尝试复制那种行为。 - jAC
@jAC,它作为EC2实例运行。 - Neno
2个回答

8

在AWS 18.04 Ubuntu上遇到了与本地服务器一模一样的问题,使用Nginx 1.16.1作为前置服务器和反向代理来运行.NET Core 2.2。

通过以下两个步骤解决了问题:

1) 配置Nginx的最大请求大小 - 确保前置Nginx不会阻止请求从反向代理后面的应用程序到达。我在server块中添加了'adding client_max_body_size 30M;', 但还有其他方式可以实现此目的,请参阅:https://www.tecmint.com/limit-file-upload-size-in-nginx/)

2) 在Main中添加相同的代码,只有1个小变化-它没有指定请求大小,而是插入了一个空值,这将使Kestrel认为这是可能的最大值(据我所知)。

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

0

如果您正在Windows上使用带有IIS Express的Visual Studio,则无需使用Kestrel。

在applicationHost.config或Web.config文件中进行更改:

  • 打开<YourProjectFolder>/.vs/<YourProjectName>/config/applicationhost.config下的applicationHost.config文件,或打开您的Web.config文件。
  • 找到包含<requestFiltering><security><system.webserver>
  • 添加此<requestLimits maxAllowedContentLength="2147483648" />

Hence the final code will look like:

<system.webServer>
   <security>
       ...
       <requestFiltering>
           <requestLimits maxAllowedContentLength="2147483648" />
       </requestFiltering>
   </security>
   ...
</system.webServer>
如果这不起作用,请尝试在ASP .Net Core项目的控制器中的Post操作中添加[DisableRequestSizeLimit]属性。
[HttpPost("postfiles")]
[DisableRequestSizeLimit]
public async Task<ActionResult> PostFiles()
{
    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接