Content.ReadAsAsync 总是给出 null

本文关键字:null ReadAsAsync Content | 更新日期: 2023-09-27 17:55:38

我在使用 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;

上述代码的结果:

  • 它成功地进行后调用,得到结果。

  • 结果计数显示 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;

为什么?这是怎么回事?

Content.ReadAsAsync 总是给出 null

问题是你给_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>使用内部HttpContent.ReadAsStreamAsync来缓存内存流,一旦被读取Position就会停留在流的末尾。

您必须将NewtonSoft.json.dll更新为最新版本。这应该有效。