Content.ReadAsAsync始终为null

时间:2016-07-06 07:40:48

标签: c# asp.net-web-api

我在使用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。我期待这里有一个清单。

我的问题。

以下代码行始终显示为null。而我期待有名单。

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

为什么呢?这有什么不对?

1 个答案:

答案 0 :(得分: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,就会停留在流的末尾。