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

.NET5 MVC向.NET5 API提交多文件列表仅获取到单个文件问题求解

问题原因

核心错误出在构造MultipartFormDataContent的循环逻辑里:int i = 0 这行代码写在了foreach循环的内部,导致每一轮遍历CategoryDetails的时候,索引i都会被重置为0,所有的表单字段最终都会绑定到CategoryDetails[0]这个位置,后端模型绑定时自然只能拿到最后一次覆盖的单个文件对象。

修复方法

只需要把索引变量i的声明移到foreach循环外部即可,修改后的请求发送代码如下:

var multiForm = new MultipartFormDataContent();
multiForm.Add(new StringContent(entity.Id.ToString()), "Id");
multiForm.Add(new StringContent(entity.Name), "Name");

// 把索引变量声明移到循环外
int i = 0;
foreach (var item in entity.CategoryDetails)
{
    multiForm.Add(new StringContent(item.Url), $"CategoryDetails[{i}].Url");
    multiForm.Add(new StreamContent(item.File.OpenReadStream()), $"CategoryDetails[{i}].File", item.File.FileName);
    i++;
}

var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = multiForm };

var accessToken = _context.HttpContext.User.Claims.FirstOrDefault(c => 
c.Type==AppClaims.AccessToken)?.Value;
if (!string.IsNullOrEmpty(accessToken))
{
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}

var client = _clientFactory.CreateClient("ApiServer");
var response = await client.SendAsync(request).ConfigureAwait(false);

额外校验点

如果修改后仍有绑定问题,可以检查以下配置:

  • 确认后端Category类的CategoryDetails属性在接收请求前已经初始化,避免因空集合导致绑定失败
  • 如果接口只接收表单文件,可以把Consumes特性简化为[Consumes("multipart/form-data")],多余的接收类型可能会干扰绑定逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:02