2016-07-06 2 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>>()을 두 번 호출하는 것입니다. 당신은 어떤 변수에 결과를 저장하고

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

당신은 더 나은 대신 ReadAsAsync<T>이 internaly 메모리 스트림을 캐시 HttpContent.ReadAsStreamAsync 사용하여보다 구체적으로 .Result


를 호출 async/await를 활용하는 것와 함께 다음 작업을해야 일단 읽히면 Position은 스트림의 마지막에 남습니다.

관련 문제