增加Kestrel的上传请求长度限制

时间:2017-10-13 21:38:10

标签: file-upload asp.net-core asp.net-core-2.0 kestrel-http-server

我正在运行ASP.NET Core Web应用程序并希望上传大文件。

我知道在运行IIS时,可以通过web.config更改限制:

<httpRuntime maxRequestLength="1048576" /> 
...
<requestLimits maxAllowedContentLength="1073741824" /> 

如何在运行新的ASP.NET Core Kestrel Web服务器时执行等效操作?

我收到异常“请求正文太大了。”

2 个答案:

答案 0 :(得分:39)

我发现this helpful announcement确认从ASP.NET Core 2.0开始有28.6 MB的主体大小限制,但更重要的是显示如何绕过它!

总结:

对于单个控制器或操作,请使用[DisableRequestSizeLimit]属性进行限制,或使用[RequestSizeLimit(100_000_000)]指定自定义限制。

要在BuildWebHost()方法内部全局更改Program.cs文件,请在下面添加.UseKestrel选项:

WebHost.CreateDefaultBuilder(args)
  .UseStartup<Startup>()
  .UseKestrel(options =>
  {
    options.Limits.MaxRequestBodySize = null;
  }

为了更加清晰,您还可以参考Kestrel options documentation

答案 1 :(得分:2)

other answer用于ASP.NET Core 2.0,但我想提供.NET Core 3.x Web API的解决方案。

您在program.cs中的代码必须像这样工作:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.UseKestrel(options =>
                {
                    options.Limits.MaxRequestBodySize = null;
                });
            });
}