2016-07-06 193 views
0

我在使用Content.ReadAsAsync閱讀同意書時遇到問題。 看看我的代碼。Content.ReadAsAsync始終爲空

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。我期待在這裏列出。

我的問題。

以下代碼行始終顯示爲空。而我期待有名單。

_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>>()兩次。你應該將結果存儲在一些變量,然後工作,它

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

而且你會更好地利用async/await而不是調用.Result


更具體ReadAsAsync<T>使用internaly HttpContent.ReadAsStreamAsync用於緩存內存流一旦它被讀取,Position停留在流的末尾。