You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC 2上传大二进制数据报错,求解决方法

解决ASP.NET Core MVC 2中上传大尺寸二进制数据的Kestrel异常问题

这个问题我之前处理过,核心原因就是Kestrel服务器默认的请求体大小限制在作怪!ASP.NET Core 2.x里Kestrel对单个请求的体大小有默认上限,你的22MB文件没超过这个阈值所以正常,38MB刚好触发了限制,就抛出了Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException。

下面给你几种可行的解决办法,按需选择:

1. 全局配置Kestrel的最大请求体大小

方式一:通过代码配置

在项目的Program.cs文件中,修改BuildWebHost方法,添加Kestrel的限制配置:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options =>
        {
            // 这里设置为50MB(单位是字节,50*1024*1024=52428800),你可以根据需求调整
            options.Limits.MaxRequestBodySize = 52428800;
        })
        .UseStartup<Startup>()
        .Build();

方式二:通过配置文件设置

打开appsettings.json,添加Kestrel的限制项:

{
  "Kestrel": {
    "Limits": {
      "MaxRequestBodySize": 52428800
    }
  }
}

2. 针对单个控制器动作设置限制

如果只是这个上传接口需要放宽限制,不想全局调整,可以给你的动作方法加上[RequestSizeLimit]特性:

[HttpPost]
[RequestSizeLimit(52428800)] // 同样设置为50MB,按需修改
public async Task<IActionResult> RawBinaryDataManual() {
    using (var ms = new MemoryStream()) {
        await Request.Body.CopyToAsync(ms);
        var bytes = ms.ToArray();
        return StatusCode((int) HttpStatusCode.OK);
    }
}

3. IIS托管额外配置(如果用IIS部署)

如果你的项目是部署在IIS上的,除了上面的配置,还需要在web.config里添加请求长度限制:

<system.webServer>
  <security>
    <requestFiltering>
      <!-- 单位为字节,这里对应50MB -->
      <requestLimits maxAllowedContentLength="52428800" />
    </requestFiltering>
  </security>
</system.webServer>

调整完这些配置后,再上传38MB的文件就不会再触发异常了。

内容的提问来源于stack exchange,提问作者Andrey Bushman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:14:27