【问题标题】:How to pass Json data as parameter to web api using HttpClient如何使用 HttpClient 将 Json 数据作为参数传递给 Web api
【发布时间】:2016-06-09 08:58:31
【问题描述】:

我正在使用一个 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 数据而不是 json 数据,则会给出错误响应代码 400 Bad Request。

与我使用 jQuery ajax 调用相同,它工作正常,没有问题。

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

【问题讨论】:

  • 你能添加一个关于jsonData是什么样子的例子吗?
  • 你能检查我的答案吗

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


【解决方案1】:

假设你有一堂课

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();
}

【讨论】:

    【解决方案2】:

    另外请在

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

    public void GetWebApiData(int fileID, String jsonData)

    如果不工作

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

    类似的东西 JSON.stringify(jsonData); 要么 JsonConvert.SerializeObject(jsonData);

    【讨论】:

    • 我使用 StringContent 反序列化我的 json 数据并能够调用 web api 但现在的问题是如何从 StringContent 获取 json 数据?
    • JavaScriptSerializer 序列化器 = new JavaScriptSerializer(); object obj = serializer.Deserialize(jsDat);
    • jsDat 是 StringContent 而不是字符串。请提供 StringContent 的代码以获取字符串中的值。
    • 给我一个简单的例子,将json数据传递给web api并将数据返回为json字符串格式。
    • 使用此链接“stackoverflow.com/questions/35344981/…”我曾经将 json 数据转换为 StringContent,它能够将其传递给 web api,我必须从 StringContent 参数取回 json 字符串数据。需要帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2013-12-12
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2018-08-28
    相关资源
    最近更新 更多