2016-07-06 16 views
0

私はContent.ReadAsAsyncを使用して同意書を読む際に問題に直面しています。 私のコードを見てください。Content.ReadAsAsyncは常にnullを返します

private HttpResponseMessage _responseMessage; 
_responseMessage = UnitTestHelper.Get(string.Format("api/StudentController/Get/?StartDate={0}&EndDate={1}", DateTime.Now, DateTime.Now)); 
Assert.IsTrue(_responseMessage.IsSuccessStatusCode); 
Assert.IsTrue(_responseMessage.Content.ReadAsAsync<List<StudentModel>>().Result.Count > 0); 
var auditData = _responseMessage.Content.ReadAsStringAsync().Result; 
_responseMessage.Content.ReadAsAsync<List<StudentModel>>().Result; 

上記のコードの結果:

  • それは成功した後の呼び出しを行う、バック結果を取得します。

  • Result.Count 1.

  • ReadAsStringAsyncは、次の形式でデータを示す示します。

    [{\"User\":\"Test\",\"Location\":\"MyCountry\",\"Class\":\"Grade1\",\"Time\":\"2016-07-06T07:26:11.183\",\"SchoolName\":\"ABC School System\"}] 
    
  • 最後の行がnullです。私はここにリストを期待しています。

私の問題。

次のコード行は常にnullを示します。私はリストを持っていることを期待しています。

_responseMessage.Content.ReadAsAsync<List<StudentModel>>().Result; 

なぜですか?ここで何が間違っていますか?

+0

こちらをご覧くださいhttp://stackoverflow.com/questions/14205590/await-a-async-void-method-call-for-unit-testing –

+0

あなたは疑問です。接頭辞付きのオブジェクトが 'null'の場合、' Result.Count'にどのようにアクセスできますか? – Nkosi

+0

もう一度質問をしてください。更新しました。 – immirza

答えて

1

問題は、_responseMessage.Content.ReadAsAsync<List<StudentModel>>()を2回呼び出すことです。また、あなたがより良いasync/awaitを利用したいの代わりに、ReadAsAsync<T>具体的に.Result


を呼び出すと、内部的メモリストリームをキャッシュHttpContent.ReadAsStreamAsyncを使用しています

var result = _responseMessage.Content.ReadAsAsync<List<StudentModel>>().Result; 
Assert.IsTrue(result.Count > 0); 
//do whatever needed with result 

いくつかの変数に結果を格納し、それで動作するはずですそれが読み込まれると、ストリームの終わりにとどまります。 Position

関連する問題