如何在Web API中传递IList <myobject>作为POST方法的参数?

时间:2016-06-24 12:28:01

标签: c# rest asp.net-web-api asp.net-web-api2

在我的项目中,我有一个名为Project的模型类,我在我的REST服务中有一个POST方法,在Web API中开发,我希望收到一个Project列表,但总是我调用这个方法,IList参数为null。我要做什么来传递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;
    }

1 个答案:

答案 0 :(得分:2)

将参数转换为数组

[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);

//....