Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException:请求正文太大

moh*_*eli 5 iis asp.net-core-mvc asp.net-core

我正在尝试将100MB的影片上传到我的ASP.NET Core应用程序。

我在动作上设置了此属性:

[RequestSizeLimit(1_000_000_000)]
Run Code Online (Sandbox Code Playgroud)

而且我还更改了Web.config文件以包括:

<security>
  <requestFiltering>
    <!-- This will handle requests up to 700MB (CD700) -->
    <requestLimits maxAllowedContentLength="737280000" />
  </requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)

换句话说,我已经告诉IIS允许最大700MB的文件,并且我还告诉ASP.NET Core允许接近1GB的文件。

但我仍然会收到该错误。而且我找不到答案。有任何想法吗?

PS:使用这些配置,我可以传递30MB的默认大小。我可以上传50或70兆字节的文件。

小智 16

我认为你只需要:[DisableRequestSizeLimit]

下面是一个对我有用的解决方案,用于将带有附加表单数据的 Zip 文件上传到运行 .Net Core 3 的 API

// MultipartBodyLengthLimit  was needed for zip files with form data.
// [DisableRequestSizeLimit] works for the KESTREL server, but not IIS server 
// for IIS: webconfig... <requestLimits maxAllowedContentLength="102428800" />
[RequestFormLimits(ValueLengthLimit = int.MaxValue, MultipartBodyLengthLimit = int.MaxValue)] 
[DisableRequestSizeLimit] 
[Consumes("multipart/form-data")] // for Zip files with form data
[HttpPost("MyCustomRoute")]
public IActionResult UploadZippedFiles([FromForm] MyCustomFormObject formData)
{ }
Run Code Online (Sandbox Code Playgroud)

  • 我差点放弃,但你的解决方案很有魅力!我还找到了这个链接https://github.com/dotnet/aspnetcore/issues/20369#issuecomment-607057822 (3认同)

ʞᴉɯ*_*ʞᴉɯ 12

对于我(Asp.net core 3.1ConfigureServices )来说,解决方案是在方法中添加这些行Startup.cs

    // 200 MB
    const int maxRequestLimit = 209715200;
    // If using IIS
    services.Configure<IISServerOptions>(options =>
    {
        options.MaxRequestBodySize = maxRequestLimit;
    });
    // If using Kestrel
    services.Configure<KestrelServerOptions>(options =>
    {
        options.Limits.MaxRequestBodySize = maxRequestLimit;
    });
    services.Configure<FormOptions>(x =>
    {
        x.ValueLengthLimit = maxRequestLimit;
        x.MultipartBodyLengthLimit = maxRequestLimit;
        x.MultipartHeadersLengthLimit = maxRequestLimit;
    });
Run Code Online (Sandbox Code Playgroud)

和编辑web.config

    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="209715200" />
        </requestFiltering>
      </security>
    </system.webServer>
Run Code Online (Sandbox Code Playgroud)


Ash*_*thi 6

注意:这是我将应用程序从 asp.net core 2.1 迁移到 3.0 时遇到的问题

为了在 asp.net core 3.0 中解决这个问题,我更改了我的 program.cs 以修改最大请求正文大小,如下所示。

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
       return WebHost.CreateDefaultBuilder(args)
            .ConfigureKestrel((context, options) =>
            {
                options.Limits.MaxRequestBodySize = 737280000;
            })
            .UseStartup<Startup>();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是我刚刚添加了ConfigureKestrel部分并在我的操作方法上方添加了一个属性,[RequestSizeLimit(737280000)]如下所示

[HttpPost]
[RequestSizeLimit(737280000)]
[Route("SomeRoute")]
public async Task<ViewResult> MyActionMethodAsync([FromForm]MyViewModel myViewModel)
{
   //Some code
   return View();
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序再次开始正常运行而不会抛出 BadHttpRequestException: Request body too large

参考:https : //docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.0#kestrel-maximum-request-body-size