如何使用HttpClient将Json数据作为参数传递给Web API

3

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

在web API控制器中,我传递了两个参数,一个是int类型的,另一个是字符串。

以下是代码:

public HttpResponseMessage Get(int submissionID, string jsonData)
{

}

当我使用httpClient传递一个int和一个string参数时,一切都很正常,没有问题。

以下是我的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数据作为参数传递?


1
你能否添加一个jsonData长什么样子的例子? - Ravi A.
你能检查一下我的答案吗? - Ravi A.
2个回答

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

请在以下代码中使用 "string" 而不是 "String" 类:

public void GetWebApiData(int fileID, String jsonData)

如果无法正常工作,请尝试使用 stringify 或 SerializeObject() 将数据转换为字符串,然后再将其作为参数传递。

例如: JSON.stringify(jsonData); 或 JsonConvert.SerializeObject(jsonData);


我使用StringContent反序列化我的JSON数据并能够调用Web API,但现在的问题是如何从StringContent中获取JSON数据? - Akash Kumar
JavaScriptSerializer序列化器=新的JavaScriptSerializer(); 对象obj=序列化器.Deserialize<object>(jsDat); - arunraj770
jsDat是StringContent而不是string。请提供StringContent的代码以获取字符串值。 - Akash Kumar
请给我一个简单的例子,将JSON数据传递到Web API并将数据返回到JSON字符串格式。 - Akash Kumar
使用此链接“https://dev59.com/mVsW5IYBdhLWcg3wI0VH”,我曾经将JSON数据转换为StringContent,并且能够将其传递到Web API,然后我必须从StringContent参数中获取JSON字符串数据。需要帮助。 - Akash Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接