React Native+NET8后端上传时IFormFile始终为Null问题求助
React Native 0.76.1 + .NET 8 文件上传:IFormFile始终绑定为Null
开发React Native 0.76.1应用搭配.NET 8后端的图片上传功能时,遇到以下问题:
- 后端接收
IFormFile时始终为Null,但HttpContext.Request.Form中能看到文件相关数据 - 请求已携带
Content-Type: multipart/form-data请求头 - API端点已添加
[FromForm]特性
后端代码
JobController
public class JobController : BaseController { private readonly JobService _jobService; public JobController(JobService jobService) { _jobService = jobService; } [HttpPost] public async Task<Guid> AddJobAsync([FromForm] AddJobInputModel model) { return await _jobService.AddJobAsync(model.AsAddJobModel()); } }
模型定义
public class AddJobInputModel { [Required(ErrorMessage = "WizardIdRequired")] public Guid WizardId { get; set; } public decimal? CalculatedPrice { get; set; } [Required(ErrorMessage = "DetailsRequired")] public AddJobDetailInputModel[]? Details { get; set; } public AddJobModel AsAddJobModel() { return new AddJobModel { WizardId = WizardId, CalculatedPrice = CalculatedPrice, Details = Details! .Select(jd => jd.AsAddJobDetailModel()) .ToArray() }; } }
public class AddJobDetailInputModel { [Required(ErrorMessage = "FieldIdRequired")] public Guid? FieldId { get; set; } public string? Value { get; set; } public IFormFile? FileTest { get; set; } public List<IFormFile>? Files { get; set; } public AddJobDetailModel AsAddJobDetailModel() { return new AddJobDetailModel { FieldId = FieldId!.Value, Value = Value, File = FileTest }; } }
问题细节
其他字段(如wizardId、details[n].fieldId、details[n].value等)均能正常绑定,仅IFormFile无法完成绑定。
前端FormData序列化内容
{ "_parts":[ [ "wizardId", "ab629ade-0a9c-4f2b-b06c-e23f807d524d" ], [ "details[0].fieldId", "c1885911-f2fa-42be-9c2c-4a4cc728e9dd" ], [ "details[0].value", "PostalCode" ], [ "details[1].fieldId", "56744dd4-a041-4fb5-a92f-15f1114cc804" ], [ "details[1].value", "123 m2" ], [ "details[2].fieldId", "4db89fdd-ab44-4187-8dfb-fb080448df47" ], [ "details[2].value", "6535178c-cdb5-4723-a044-59feca2a5658" ], [ "details[3].fieldId", "dc8665b1-98c4-481c-ab8c-9a5e04a4996c" ], [ "details[3].value", "c18458c0-d7f8-4103-8dfc-c039770ce061" ], [ "details[4].fieldId", "e6b0da98-1424-45b9-bcd9-b0e65d54fa3d" ], [ "details[4].value", "9fca0a9c-d310-484c-a469-68d2c234c82e" ], [ "details[5].fieldId", "9f14cf43-bda4-40e6-b356-5f3d6232a267" ], [ "details[5].value", "1d690725-20e4-4853-9a28-a6cbb76f1102" ], [ "details[6].fieldId", "81453abf-af63-4c63-b71e-00ce4a161dc6" ], [ "details[6].value", "Qwer" ], [ "details[7].fieldId", "6d5905a7-869e-4a9a-b5f1-aa04b6f549ff" ], [ "details[7].fileTest.width", "800" ], [ "details[7].fileTest.fileName", "35616D7D-7E64-4C02-8D93-591A380FC699.jpg" ], [ "details[7].fileTest.height", "533" ], [ "details[7].fileTest.type", "image/jpg" ], [ "details[7].fileTest.uri", "file:///Users/bok/Library/Developer/CoreSimulator/Devices/655A9DE8-190D-4CEF-B14E-DA73E42E33FA/data/Containers/Data/Application/7CFEAEE4-1099-4A84-B801-0FB9EA34D641/tmp/35616D7D-7E64-4C02-8D93-591A380FC699.jpg" ], [ "details[7].fileTest.fileSize", "132883" ] ] }
内容的提问来源于stack exchange,提问作者nbokmans
相关产品推荐
相关产品推荐

