如何将数组发送到 API 其中包含 .net 核心中的图像和其他数据

how to send array to API which contains image and other data in .net core

当我像下面这样传递单个对象时,它会按照下图工作

[HttpPost]
public async Task<ActionResult> Post([FromForm] MyModel Details)
{
}

但是当我将对象的 List 传递给 API 时,它不起作用。上传文件的选项不可见。如果我在数组中输入任何值,那么我也会得到计数 0 的详细信息。

 [HttpPost]
 public async Task<ActionResult> Post([FromForm] List<MyModel> Details)
 {}

我想将图像和描述列表传递给 API。我怎样才能实现它?

提前致谢!

您需要为列表模型自定义模型绑定。这是一个类似的演示:

自定义模型绑定代码:

    public class MetadataValueModelBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            if (bindingContext == null)
                throw new ArgumentNullException(nameof(bindingContext));
    
            var values = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
    
            if (values.Length == 0)
                return Task.CompletedTask;
            var options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true };
    
            var deserialized = JsonSerializer.Deserialize(values.FirstValue, bindingContext.ModelType, options);
    
            bindingContext.Result = ModelBindingResult.Success(deserialized);
            return Task.CompletedTask;
        }
    }

添加模型绑定到模型class:

    public class MasterDTO
    {
        public string Comments { get; set; }
        public IFormFile File { get; set; }        
        public List<DetailDTO> Details { get; set; }
    
        public MasterDTO()
        {
            this.Details = new List<DetailDTO>();
        }
    }
    
    [ModelBinder(BinderType = typeof(MetadataValueModelBinder))]
    public class DetailDTO
    {
        public Int64 ElementId { get; set; }
    
        public double LowerLimit { get; set; }
    
        public double HigherLimit { get; set; }
    
        public string Status { get; set; }
    
        public string UserAuthorization { get; set; }
    
        public DateTime? AutorizationDate { get; set; }
    }

controller/action

            [HttpPost]
            public async Task<IActionResult> CreateProjectLimit([FromForm] MasterDTO masterDto)
            {
                //...
    
                return Ok();
            }

您可以只使用 postman 将图像和描述列表传递给 API

以下是正确答案。我们可以使用 Postman 传递数组中的图像,如下所示。