2017-01-20 3 views
0

Ich versuche, eine Antwort von einer HTTP-Anfrage zu bekommen, aber ich kann nicht zu sein. Ich habe versucht, die folgenden:Wie bekomme und drucke Antwort von Httpclient.SendAsync Anruf

public Form1() {  

    HttpClient client = new HttpClient(); 
    client.BaseAddress = new Uri("someUrl"); 
    string content = "someJsonString"; 
    HttpRequestMessage sendRequest = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress); 
    sendRequest.Content = new StringContent(content, 
              Encoding.UTF8, 
              "application/json"); 

Nachricht mit:

... 
    client.SendAsync(sendRequest).ContinueWith(responseTask => 
    { 
     Console.WriteLine("Response: {0}", responseTask.Result); 
    }); 
} // end public Form1() 

Mit diesem Code, erhalte ich den Statuscode zurück und einige Header-Informationen, aber ich habe nicht die Antwort selbst zurück. Ich habe auch versucht:

HttpResponseMessage response = await client.SendAsync(sendRequest); 

aber ich habe gehört, dass dann ein asynchrones Verfahren wie die folgenden zu schaffen, um es

funktioniert
private async Task<string> send(HttpClient client, HttpRequestMessage msg) 
{ 
    HttpResponseMessage response = await client.SendAsync(msg); 
    string rep = await response.Content.ReadAsStringAsync(); 
} 

Ist dies der bevorzugte Weg, einen ‚Httprequest‘ zu senden, erhalten und die Antwort ausdrucken? Ich bin mir nicht sicher, welche Methode die richtige ist.

+1

lesen Es gibt keinen falschen oder richtigen Weg, dies zu tun. Abhängig von Ihrer Anwendung, beide sinnvoll. Wenn Sie nicht sicher sind, würde ich persönlich den async/warte Ansatz empfehlen. –

+0

Es gibt keine Möglichkeit, den gesamten Code innerhalb des Konstruktors zu haben, nehme ich an? Ich teste gerade eine API aus. – jones

+0

Ich bin mir nicht sicher, was das Problem mit den erwähnten Lösungen ist, aber Sie können auch einfach die Result-Eigenschaft verwenden. var response = Client.SendAsync (sendRequest) .Result; Beachten Sie, dass Sie die Asynchronität mit diesem Ansatz "verlieren". Dies ist blockiert (wie erwartet). –

Antwort

0

hier ist ein Weg, HttpClient zu verwenden, und dies sollte die Antwort der Anfrage, falls die Anforderung Rückgabestatus 200, (die Anforderung nicht BadRequest oder NotAuthorized)

string url = 'your url here'; 

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpResponseMessage response = client.GetAsync(url).Result) 
    { 
      using (HttpContent content = response.Content) 
      { 
       var json = content.ReadAsStringAsync().Result; 
      } 
    } 
} 

und für weitere Informationen lesen und um zu sehen, wie man async/await mit HttpClient verwendet, können Sie die Details von this answer

+0

Sie Vielleicht möchten Sie die Nutzung verketten, um die Verschachtelung zu reduzieren. –

+0

irgendwie, was ich am Ende herausgefunden habe, glaube ich, Prost. – jones

Verwandte Themen