2016-06-18 8 views
0

, so dass dies seit einer Weile abgehört hat. Ich bin nicht sicher, warum mein Http Response Message Schritt von Visual Studio Debugger übersprungen wird. Dies ist der Code, den ich gerade habe:Asynchrone HTTP-Antwortnachricht

public async void APIcall()   
{     
    HttpClient httpClient = new HttpClient(); 
    HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx"); 
    requestMessage.Headers.Add("Accept", "application/json"); 
    requestMessage.Headers.Add("ContentType", "application/json"); 
    requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx"); 
    HttpResponseMessage response = await httpClient.SendAsync(requestMessage); 
    string result = await response.Content.ReadAsStringAsync(); 
    Console.WriteLine(result); 
    Console.ReadLine(); 
} 

Bitte geben Sie Ihre Vorschläge und Hilfe, um dies zu lösen.

Antwort

0

Zuerst sollten Sie vermeiden async auf void Methoden, es sei denn, es ist ein Event-Handler. Verwenden Sie Task, auch wenn Sie nichts zurückgeben.

Als nächstes nehmen Sie an, dass Sie immer Inhalt von Ihrer Anfrage bekommen werden.

Sie sollten zunächst prüfen, ob es etwas

zu erhalten ist, wenn Sie async auf Leere Methoden, um Ihre Ausnahmen verwenden werden verfangen nicht. Das ist wahrscheinlich der Grund, warum es so weitersprang, wie du gesagt hast. Es war wahrscheinlich ein Fehler.

private static HttpClient httpClient = new HttpClient(); 
public async Task APIcall() { 
    try { 
     HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://xxxx"); 
     requestMessage.Headers.Add("Accept", "application/json"); 
     requestMessage.Headers.Add("ContentType", "application/json"); 
     requestMessage.Headers.Add("RequestMessageGUID", "xxxxxx"); 
     HttpResponseMessage response = await httpClient.SendAsync(requestMessage); 
     if (response.Content.Headers.ContentLength.GetValueOrDefault() > 0) { 
      string result = await response.Content.ReadAsStringAsync(); 
      Console.WriteLine(result); 
     } else { 
      Console.WriteLine(response.StatusCode); 
     } 
    } catch(Exception ex) { 
     Console.WriteLine(ex.Message); 
    } 
    Console.ReadLine(); 
}