.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
相关产品推荐
相关产品推荐

