2016-07-06 112 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停留在流的末尾。