簡體   English   中英

PostAsync 參數始終為空

[英]PostAsync parameter is always null

我正在調用 API Post 方法,但是,我不確定我做錯了什么,但 API 中的值始終為空。 我正在調用 API 的方法如下。 當我點擊這個時,我可以看到 Ids 是具有 5 個值的整數列表。

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

我曾嘗試從 WebAPI 控制器中刪除 [FromBody] 注釋,但測試仍然使用 SaveData API 方法中的斷點獲取空值

嘗試這個:

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並替換.GetAwaiter().GetResult(); 在那個電話前面await

就我而言,我使用 System.Web.Http.ApiController 而不是 System.Web.Mvc.Controller。 所以所有的代碼看起來像

public class YourAppController : ApiController
{
    [System.Web.Http.Route("publish-message")]
    public HttpResponseMessage Post([System.Web.Http.FromBody] string msges)
    {
        //Your Code
        return Request.CreateResponse(HttpStatusCode.OK, "");

    }
}


public async Task<string> PublishMessageCall(string publishMessage){                
        var returnval = "";
        string httpWebRqst = "http://localhost:543134535/publish-message";

        using (HttpClient myClient = new HttpClient())
        {
            var jsonString = JsonConvert.SerializeObject(publishMessage);
            var content = new StringContent(jsonString, Encoding.UTF8, "application/json");

            var response = await myClient.PostAsync(httpWebRqst, content);

            var responseString = await response.Content.ReadAsStringAsync();

        }
        return await Task.FromResult(returnval);}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM