在客户端调用rest api c#

时间:2017-02-01 05:51:18

标签: c# rest asp.net-web-api

我是api的新手。 我想在c#代码中获得此api(http://services.groupkt.com/country/get/all)的结果。你可以通过建议任何代码和教程来帮助我。谢谢 我试过这段代码,但它不起作用。

public async Task DownloadData()
{
    string url = string.Format("http://services.groupkt.com/country/get/all");

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Accept", "application/json");

    var jsonString = await client.GetStringAsync(url);

    JToken token = JToken.Parse(jsonString);

    foreach (var item in token)
    {
        txtarea.Value= item.ToString();
    }
}

3 个答案:

答案 0 :(得分:1)

首先使用

client.GetStringAsync(url).Result

而不是

client.GetStringAsync(url)

第二次收到json后,解析结果变得非常简单。我看到之前的回答,他们都在使用循环,在我看来解析并不是一个好主意。 在这种情况下使用Newtonsoft.Json库及其非常方便。我已使用此库解析了您的json响应。 制作一类结果,即

    public class result
    {
        public string name { get; set; }
        public string alpha3_code { get; set; }
        public string alpha2_code { get; set; }
    }

在获取json响应以解析你的json之后输入这段代码。

JObject jsonResponse = JObject.Parse(jsonString);
JObject objResponse = (JObject)jsonResponse["RestResponse"];
Dictionary<string, JArray> _Data = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, JArray>>(objResponse.ToString());
var results = _Data["result"].ToObject<List<result>>();

它完美无缺,我已经对此进行了测试。

不要忘记添加Newtonsoft.Json和Newtonsoft.Json.Linq命名空间

答案 1 :(得分:0)

您的代码正确获取响应。但解析不正确。

尝试以下完整解析代码。

public async Task DownloadData()
{
    string url = string.Format("http://services.groupkt.com/country/get/all");
    string top_parent_key_name = "RestResponse";
    string second_parent_key_name = "result";
    string field_one_key_name = "name";

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Accept", "application/json");

    var jsonString = await client.GetStringAsync(url);

    JToken token = JToken.Parse(jsonString);

    foreach (var item in token[top_parent_key_name][second_parent_key_name])
    {
        txtarea.InnerText = item[field_one_key_name].ToString();
    }
}

答案 2 :(得分:0)

添加,我更喜欢动态,所以代码沟通得更清楚。

public async Task DownloadData()
{
    string url = $"http://services.groupkt.com/country/get/all";

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Accept", "application/json");

    string response = await client.GetStringAsync(url);

    dynamic json = JToken.Parse(response);

    foreach (var item in token.RestResponse.result)
    {
        //Note: Your over writing the text here for each item you pass
        //      Did you mean to concat instead? += "\n\r" + item.name;
        txtarea.InnerText = item.ToString();
    }
}

现在至于在标记为&#34; ASP.NET-Web-Api&#34;的问题中执行txtarea.InnerText = ...。看起来有点奇怪,它是带有Web Api的ASP.NET MVC还是更经典的Web窗体应用程序?

相关问题