如何传递list 作为Web API中POST方法的参数

本文关键字:API POST 方法 参数 Web 作为 list 何传递 MyObject | 更新日期: 2023-09-27 17:49:25

在我的项目中,我有一个名为project的模型类,我在我的REST服务中有一个POST方法,在Web API中开发,我想要接收project的列表,但总是调用此方法,IList参数为空。我要做什么来传递List作为参数?

这是我的控制器:

[IdentityBasicAuthentication]
[Authorize]
[RoutePrefix("project")]
public class ProjectController : ApiController
{
    [HttpPost]
    [Route("listafavoritos")]
    public IList<PROSPERI_EpmFast.Core.Modelo.POCO.Project> ListaFavoritos([FromBody] List<PROSPERI_EpmFast.Core.Modelo.POCO.Project> projetos)
    {
         //execute the actions
    }
}

这是我的服务调用:

    public virtual async Task<IList<Project>> ListaProjetosFavoritos(IList<Project> projetosFavoritos)
    {

       var url = "http://myserviceurl/project/listafavoritos";

        _client.DefaultRequestHeaders.Authorization = authentication;

        foreach (Project projetoLimpar in projetosFavoritos)
        {
            projetoLimpar.Tasks = null;
            projetoLimpar.Team = null;
            projetoLimpar.Cost = null;
            projetoLimpar.Schedule = null;
        }
        var uri = new Uri(string.Format(url, string.Empty));
        var json = JsonConvert.SerializeObject(projetosFavoritos, this._microsoftDateFormatSettings);
        var contentEnvio = new StringContent(json, Encoding.UTF8, "application/json");
        _client.Timeout = new TimeSpan(0, 5, 0);
        var response = await _client.PostAsync(uri, contentEnvio);
        if (response.IsSuccessStatusCode)
        {
            var content = await response.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<IList<Project>>(content, this._microsoftDateFormatSettings);
        }
        return null;
    }

如何传递list <MyObject>作为Web API中POST方法的参数

将参数转换为数组

[HttpPost]
[Route("listafavoritos")]
public IList<Project> ListaFavoritos([FromBody]Project[] projetos) { ... }

并在发送数据时将数据转换为数组

//....
var payload = projetosFavoritos.ToArray();
var json = JsonConvert.SerializeObject(payload, this._microsoftDateFormatSettings);
var contentEnvio = new StringContent(json, Encoding.UTF8, "application/json");
_client.Timeout = new TimeSpan(0, 5, 0);
var response = await _client.PostAsync(uri, contentEnvio);
//....