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

ASP.Net 7 Core Minimal API字节数组POST偶发接收为空问题

问题原因分析

客户端代码问题

客户端调用PostAsync时未使用await等待请求完成:

var client = new HttpClient();
byte[] arr = AnArrayThatIs100PercentneverEmpty();
Log.Information($"Sending {arr.Length} bytes");
// 缺少await,请求可能在发送过程中被提前终止
client.PostAsync(url, new ByteArrayContent(arr));

不等待异步操作完成的情况下,请求可能还没完成发送就被上下文回收,导致服务器接收到不完整甚至空的请求。

服务器端代码问题

服务器端调用CopyToAsync时同样未使用await,流复制操作还没执行完就读取ms.Length:

app.MapPost("/v1/agent_relay/call_result/{company_id}/{guid}",  (HttpContext context, string company_id, string guid) =>
{
    var ms = new MemoryStream();
    // 缺少await,复制操作未完成就执行后续代码
    context.Request.Body.CopyToAsync(ms);
    // 此时ms还未写入数据,Length自然为0
    Log.Information($"Post call_result for {company_id} {guid} {ms.Length}");
    ...  
}

CopyToAsync是异步操作,不等待的话后续代码会立即执行,此时MemoryStream还没从请求体中读取到任何内容,所以长度为0。

修复方案

  1. 客户端添加await,确保请求完整发送:
await client.PostAsync(url, new ByteArrayContent(arr));
  1. 服务器端添加await,并重置流位置到起始处(避免后续读取从流末尾开始):
await context.Request.Body.CopyToAsync(ms);
ms.Position = 0;
Log.Information($"Post call_result for {company_id} {guid} {ms.Length}");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:08:15