2017-05-10 78 views
0

我正在调用API Post方法,但是,我不确定我在做什么错误,但API中的值始终为空。我从下面调用API的方法。当我碰到这个时,我可以看到Ids是以5个值为单位的整数列表。PostAsync参数始终为空

private void Save(List<int> Ids) 
{ 
    var myAPI = ConfigurationManager.AppSettings["MyAPI"]; 

    string myIds = string.Join(",", Ids); 

    using (var client = new HttpClient()) 
    { 

    int result = client.PostAsync(myAPI, new { test = myIds }, new JsonMediaTypeFormatter()) 
         .Result 
         .Content 
         .ReadAsAsync<int>() 
         .Result; 
    } 
} 

我的API签名是像下面 - 断点上我可以看到它被击中,但测试我试图传递参数总是空

[HttpPost] 
    [Route("api/MyController/SaveData")] 
    public HttpResponseMessage SaveData([FromBody]List<string> test) 
    { 
     try 
     { 
     //Rest of method removed for brevity 

我曾试图消除[ FromBody]从控制器的WebAPI测试,但仍然标注在保存数据API方法得到空与断点

回答

2

试试这个:

private void Save(List<int> Ids) 
{ 
    var myAPI = ConfigurationManager.AppSettings["MyAPI"]; 

    using (var client = new HttpClient()) 
    { 
     var requestBody = JsonConvert.SerializeObject(Ids); 
     var postRequest = new StringContent(requestBody, Encoding.UTF8, "application/json"); 

     var response = client.PostAsync(myAPI, postRequest).GetAwaiter().GetResult(); 
     var rawResponse = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); 
     // Do something with the answer 
    } 
} 

我也建议在该调用之前制作方法private Task Save并用await代替.GetAwaiter().GetResult();

+0

会给出一个去 - 认为有一个错误的答案就在使用_httpClient应该是客户端我假设 –

+1

你是对的,编辑 –

+0

Web方法签名必须包含一个参数,然后调用postRequest,并将FromBody必须使用? –