2017-02-05 3 views
1

HttpClientとasyncを使用して次のコードを書き込もうとしていますが、データを返すことができません。C#HttpClient usage

 WebRequest request = WebRequest.Create("some_url"); 
     request.Headers.Add("cookie", "some_cookie"); 

     Stream objStream = request.GetResponse().GetResponseStream(); 
     StreamReader objReader = new StreamReader(objStream); 
     string sLine = ""; 
     int i = 0; 
     while (sLine != null) 
     { 
      i++; 
      sLine = objReader.ReadLine(); 
      if (sLine != null) 
       Console.WriteLine(sLine); 
     } 

これは私が試みたものです。

 using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("cookie", "some_cookie"); 
      using (var response = await client.GetAsync("some_url")) 
      { 
       string responseData = await response.Content.ReadAsStringAsync(); 
       Console.WriteLine(responseData); 
      } 
     } 

助けてください。

を編集してください:ここでは、HttpClientを使用して私のために動作するコードです。

 var baseAddress = new Uri(baseUrl); 
     using (var handler = new HttpClientHandler { UseCookies = false }) 
     using (var client = new HttpClient(handler) { BaseAddress = baseAddress }) 
     { 
      var requestMessage = new HttpRequestMessage(HttpMethod.Get, queryString); 
      requestMessage.Headers.Add("cookie", cookie); 
      var response = client.SendAsync(requestMessage); 
      response.Wait(); 
      var content = response.Result.Content.ReadAsStringAsync(); 
      content.Wait(); 
      Console.WriteLine(content.Result); 
     } 

ありがとうございました。あなたは非同期をやって待っていますが、次のコードは、仕事をするので、返品到達する応答データを待っていないされている

+0

非同期コードを含むコードを表示します。 –

+0

あなたは詳細を教えてください、私はそれを取得しません。バックエンドコードを見たいと思っていますか?実際には、最初のコード例が動作しています。私はHttpClientでそれを翻訳したい。 – Ulka

+0

2番目のバージョンはどうやって呼びますか?デバッグしてコンソールラインにブレークポイントを置くと、そのブレークポイントに当たっていますか? –

答えて

1

は、このコードを試してみてください:中

static async Task<string> HttpGetResponse() 
    { 
     WebRequest request = WebRequest.Create("some_url"); 
     request.Headers.Add("cookie", "some_cookie"); 
     string responseData; 
     Stream objStream = request.GetResponse().GetResponseStream(); 
     StreamReader objReader = new StreamReader(objStream); 
     string sLine = ""; 
     int i = 0; 
     while (sLine != null) 
     { 
      i++; 
      sLine = objReader.ReadLine(); 
      if (sLine != null) 
       Console.WriteLine(sLine); 
     } 

     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Add("cookie", "some_cookie"); 
      using (var response = await client.GetAsync("some_url")) 
      { 
       responseData = await response.Content.ReadAsStringAsync(); 
       Console.WriteLine(responseData); 
      } 
     } 

     return responseData; 
    } 

主にそれをこのように呼びます:

static void Main(string[] args) 
    { 
     Task<string> t = HttpGetResponse(); 


     //Do alot of work 

     t.Wait(); 
     string response = t.Result; 

     Console.WriteLine(response); 
    } 

希望しました。

+0

回答が質問のコードよりもうまく機能する理由を常に説明してください。そうでなければ、教育はしませんが、コピー/ペーストの動作を促すだけです。 – jgauffin

+0

実際には、Console.WriteLine(responseData)の行に空の文字列があります。 GetAsyncの代わりにGetStreamAsyncを使用する必要がありますか? – Ulka

+0

@jgauffinフィードバックのおかげで:) –