2015-05-11 9 views

Antwort

9

Ich habe nicht seine Leistung getestet, um sicherzustellen, aber dies scheint vielversprechend:

using(HttpClient client = new HttpClient()) 
{ 
    var response = await client.GetAsync("http://httpbin.org/get", HttpCompletionOption.ResponseHeadersRead); 

    response.EnsureSuccessStatusCode(); 

    using (var stream = await response.Content.ReadAsStreamAsync()) 
    using (var streamReader = new StreamReader(stream)) 
    using (var jsonReader = new JsonTextReader(streamReader)) 
    { 
     var serializer = new JsonSerializer(); 

     //do some deserializing http://www.newtonsoft.com/json/help/html/Performance.htm 
    } 
} 
+0

Mit' HttpCompletionOption' ist der beabsichtigte Weg, um das zu erreichen, was Sie wollten. –

2

Ich ziehe die HttpResponseMessage über using verfügen, wie es entsorgt werden kann. Ich bevorzuge es auch, mich nicht auf die Ausnahmebehandlung zu verlassen, um mit fehlgeschlagenen Anfragen fertig zu werden. Stattdessen bevorzuge ich es, den booleschen Wert IsSuccessStatusCode zu überprüfen und entsprechend vorzugehen. Zum Beispiel:

using(HttpClient client = new HttpClient()) 
{ 
    using(var response = await client.GetAsync("http://httpbin.org/get", HttpCompletionOption.ResponseHeadersRead)) 
    { 
     if(response.IsSuccessStatusCode) 
     { 
      using (var stream = await response.Content.ReadAsStreamAsync()) 
      using (var streamReader = new StreamReader(stream)) 
      using (var jsonReader = new JsonTextReader(streamReader)) 
      { 
       var serializer = new JsonSerializer(); 

       //do some deserializing http://www.newtonsoft.com/json/help/html/Performance.htm 
      } 
     } 
     else { 
      //do your error logging and/or retry logic 
     } 
    }  
} 

EDIT: Wenn Sie tun Arbeit mit einer Rate begrenzt api die HEAD-Anforderung ist einfach nicht manchmal möglich zu senden. Als solches hier ein Codebeispiel der Art und Weise ‚die gute ol mit HttpWebRequest (beachten Sie, dass es keinen besseren Weg, um mit http Fehler als WebException in diesem Fall): definitiv

var req = WebRequest.CreateHttp("http://httpbin.org/get"); 

/* 
* execute 
*/ 
try 
{ 
    using (var resp = await req.GetResponseAsync()) 
    { 
     using (var s = resp.GetResponseStream()) 
     using (var sr = new StreamReader(s)) 
     using (var j = new JsonTextReader(sr)) 
     { 
      var serializer = new JsonSerializer(); 
      //do some deserializing http://www.newtonsoft.com/json/help/html/Performance.htm 
     } 
    } 
} 
catch (WebException ex) 
{ 
    using (HttpWebResponse response = (HttpWebResponse)ex.Response) 
    { 
     using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
     { 
      string respStr = sr.ReadToEnd(); 
      int statusCode = (int)response.StatusCode; 

      //do your status code logic here 
     } 
    } 
} 
Verwandte Themen