2017-02-01 2 views
-2

Ich bin neu in Api Sachen. Ich möchte das Ergebnis dieser API (http://services.groupkt.com/country/get/all) in C# -Code erhalten. kannst du mir helfen, indem du auch Code und Tutorial vorschlägst. danke Ich habe diesen Code versucht, aber es funktioniert nicht.Calling Rest API auf der Client-Seite C#

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

"es doesnot Arbeit" hat mehrere Bedeutungen hinzuzufügen. Erhalten Sie einen Compilerfehler oder einen Laufzeitfehler oder erhalten Sie nicht die erwarteten Ergebnisse? – Thangadurai

+0

Ich versuche, Ergebnis in einem Textfeld anzuzeigen, aber es zeigt kein Ergebnis. –

+0

Verwenden Sie einen Browser, um diese URL zu besuchen und zu sehen, was Sie bekommen? oder Sie können Fiddler auch verwenden, um die Service-URL zu testen. – Thangadurai

Antwort

1

Zunächst einmal verwenden

client.GetStringAsync(url).Result 

statt

client.GetStringAsync(url) 

Zweitens, nachdem Sie die json erhalten, wird es sehr einfach, das Ergebnis zu analysieren. Ich sah die vorherigen Antworten und sie benutzten alle eine Schleife, was meiner Meinung nach keine gute Idee ist zu analysieren. Verwenden Sie Newtonsoft.Json Bibliothek und es ist sehr praktisch in solchen Situationen. Ich habe Ihre JSON-Antwort mit dieser Bibliothek analysiert. eine Klasse von Ergebnis Marke, das heißt

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

Put dieser Code nach json Antwort bekommen Ihre json zum Parsen.

Es funktioniert perfekt, das habe ich getestet.

Vergessen Sie nicht, Newtonsoft.Json UND Newtonsoft.Json.Linq Namespaces

0

Ihr Code ruft die Antwort korrekt ab. Aber falsch parsen.

Versuchen Sie den folgenden vollständigen Parsing-Code.

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

Ersetzen Sie einfach Ihre Front-End-Steuerelementnamen mit diesem. Zum Beispiel txtarea.Value = Element [field_one_key_name] .ToString(); –

+0

ich rufe auf hole DownloadData(); in Button-Klick-Funktion und Anzeige Ergebnis in Label, aber es zeigt nichts –

+0

Versuchen Sie dies 'txtarea.InnerText = Element [field_one_key_name] .ToString();' –

0

Nur hinzufügen, ich würde Dynamik hier bevorzugen, so dass der Code klarer kommuniziert.

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

Jetzt für nur txtarea.InnerText = ... in einer Frage machen Sie mit „ASP.NET-Web-Api“ bezeichnet ein wenig seltsam scheint, ist es ein ASP.NET MVC mit Web Api oder eine klassische Web Forms-Anwendung ?