多次调用HttpContent的ReadAsAsync方法

10 浏览
0 Comments

多次调用HttpContent的ReadAsAsync方法

使用Web API 2.2,假设我想两次从HttpContent中读取,每次都是不同的类型。

await httpContent.LoadIntoBufferAsync(); //需要将内容缓冲以进行多次读取
var X = await httpContent.ReadAsAsync(); //以第一个类型读取
var Y = await httpContent.ReadAsAsync>(); //以第二个类型读取

当我运行上面的代码时,XT的非空实例,而Y是空的。如果我改变顺序,Y将是一个非空字典,而X将是空的。换句话说,对ReadAsAsync的第二次及后续调用将始终返回空,除非它们使用相同的泛型类型参数进行调用。独立地,对ReadAsAsync的任何调用都按预期工作(即使不必要地调用LoadIntoBufferAsync)。

这对我来说是意外的 - 看起来我应该能够随意多次读取缓冲的内容为不同的类型。如果我添加另一行:

var Z = await httpContent.ReadAsString();

结果是,无论对X,Y,Z的赋值顺序如何,Z都将是一个非空字符串。

那么为什么会发生这种情况,为什么我不能使用ReadAsAsyncHttpContent中读取多种类型的内容?

0