如何将数组发送到 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 传递数组中的图像,如下所示。
当我像下面这样传递单个对象时,它会按照下图工作
[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 传递数组中的图像,如下所示。