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

Asp.Net Core Web API超64KB请求无法完成问题求助

我之前在ASP.NET Core 2.0基于.NET Framework 4.6.1开发Web API时,也碰到过一模一样的大POST请求挂起问题,刚好就是卡在64KB左右的阈值。结合当时的排查经验,给你几个可行的解决方向:

1. 配置ASP.NET Core自身的请求大小限制

ASP.NET Core 2.0默认对请求体大小有严格限制,尤其是Multipart类型的请求。你可以在Startup.cs里全局配置,也可以给单个Action单独设置:

全局配置(Startup.cs)

在ConfigureServices方法里添加FormOptions和Mvc的大小限制:

public void ConfigureServices(IServiceCollection services)
{
    // 配置Multipart请求的各项限制,这里设为100MB
    services.Configure<FormOptions>(options =>
    {
        options.MultipartBodyLengthLimit = 104857600; // 100MB
        options.ValueLengthLimit = 104857600;
        options.MultipartHeadersLengthLimit = 104857600;
    });

    // 设置全局请求体最大大小
    services.AddMvc(options =>
    {
        options.MaxRequestBodySize = 104857600; // 100MB
    }).SetCompatibilityVersion(CompatibilityVersion.Version_2_0);
}

单个Action单独配置

如果只有某个上传接口需要大请求,可以用[RequestSizeLimit]特性:

[HttpPost("upload")]
[RequestSizeLimit(104857600)] // 允许100MB的请求
public async Task<IActionResult> UploadImage()
{
    // 你的文件处理逻辑
    return Ok();
}
2. 检查IIS(或IIS Express)的请求限制

因为你是基于完整.NET Framework,大概率是用IIS或VS自带的IIS Express托管,这时候IIS本身的限制也会导致请求挂起:

修改项目的web.config

在项目根目录的web.config里,添加或修改<system.webServer>节点下的配置:

<system.webServer>
  <security>
    <requestFiltering>
      <!-- 允许的最大请求内容长度,单位字节,这里是100MB -->
      <requestLimits maxAllowedContentLength="104857600" />
    </requestFiltering>
  </security>
  <!-- 这个参数设置IIS提前读取的请求内容大小,避免因缓冲不足挂起 -->
  <serverRuntime uploadReadAheadSize="104857600" />
</system.webServer>

注意:uploadReadAheadSize的值必须小于等于maxAllowedContentLength,否则会报错。

IIS Express的额外配置

如果你用的是VS自带的IIS Express,可能需要修改它的全局配置文件:
找到Documents\IISExpress\config\applicationhost.config,搜索<requestLimits>节点,把maxAllowedContentLength改成你需要的值,或者针对你的项目单独添加站点级的配置。

3. 确保Multipart请求处理逻辑是异步的

如果你的上传接口是同步读取请求内容,很容易导致线程阻塞,看起来请求就像“挂起”了。一定要用异步方法读取表单数据:

[HttpPost("upload")]
public async Task<IActionResult> Upload()
{
    if (!Request.HasFormContentType)
    {
        return BadRequest("请上传正确的Multipart类型内容");
    }

    // 异步读取表单数据,避免阻塞
    var form = await Request.ReadFormAsync();
    var imageFile = form.Files.FirstOrDefault();
    
    if (imageFile == null || imageFile.Length == 0)
    {
        return BadRequest("请选择要上传的图片");
    }

    // 后续的文件保存逻辑
    return Ok(new { fileName = imageFile.FileName, size = imageFile.Length });
}

按照上面的步骤排查后,应该就能解决64KB以上POST请求挂起的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:05:58