如何使用HttpClient将Json数据作为参数传递给web api

时间:2016-06-09 08:58:31

标签: asp.net json asp.net-web-api

我正在使用一个asp.net应用程序,我使用HttpClient调用web api。

在web API控制器中我传递了两个参数,一个是int,第二个是string。

以下是代码:

public HttpResponseMessage Get(int submissionID, string jsonData)
{

}

当我使用httpClient

传递一个int和一个字符串参数时,这没有问题

以下是我的httpClient代码:

public void GetWebApiData(int fileID, String jsonData)
{
    var client = new HttpClient();
    var task = client.GetAsync("http://localhost:1469/api/Smartling/" + fileID + "/"+jsonData)
      .ContinueWith((taskwithresponse) =>
      {
          var response = taskwithresponse.Result;
          var jsonString = response.Content.ReadAsStringAsync();
          jsonString.Wait();
          var getVal = jsonString.Result;

      });
    task.Wait();
} 

在上面的代码中如果我传递而不是json数据,则会给出错误响应代码400 Bad Request。

我和jQuery ajax调用一样,它没有问题。

如何将JSON数据作为参数传递?

2 个答案:

答案 0 :(得分:4)

假设你有一个班级

public class Sample
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

在客户端

public async static Task<Boolean> GetWebApiData(int fileID,string jsonData)
{
    var client = new HttpClient();
    Sample model = new Sample();
    model = Newtonsoft.Json.JsonConvert.DeserializeObject<Sample>(jsonData);
    var response = await client.GetAsync(string.Format("http://sample.com/api/test/{0}?model.value1={1}&model.value2={2}", fileID ,model.Value1, model.Value2));
    if (response.StatusCode == HttpStatusCode.OK)
        return true;
    else
        return false;
}

在服务器端

[HttpGet]
public IHttpActionResult Get(int id,[FromUri]Sample model)
{
    //do something
    return Ok();
}

答案 1 :(得分:-1)

也请在

中使用“string”而不是“String”类

public void GetWebApiData(int fileID,String jsonData)

如果不能正常工作

在将数据作为参数传递之前,请尝试使用stringify或SerializeObject()来转换该数据。

等等  JSON.stringify(jsonData); 要么  JsonConvert.SerializeObject(jsonData);