2016-07-06 4 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

Вы задаетесь вопросом. Как вы можете получить доступ к 'Result.Count', если префиксный объект равен« null »? – 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 остается в конце потока.

Смежные вопросы