gpt4 book ai didi

c# - 多次调用 HttpContent ReadAsAsync

转载 作者:IT王子 更新时间:2023-10-29 04:30:39 29 4
gpt4 key购买 nike

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

await httpContent.LoadIntoBufferAsync(); //necessary to buffer content for multiple reads
var X = await httpContent.ReadAsAsync<T>(); //read as first type
var Y = await httpContent.ReadAsAsync<Dictionary<string, object>>(); //read as second type

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

这对我来说是出乎意料的 - 似乎我应该能够根据需要多次读取不同类型的缓冲内容。如果我添加另一行:

var Z = await httpContent.ReadAsString();

结果是 Z 将是一个非空字符串,无论分配给 X、Y、Z 的顺序如何。

那么这是怎么发生的,为什么我不能使用具有多种类型的 ReadAsAsyncHttpContent 中读取?

最佳答案

@Peter 是正确的。如果您想一次又一次地阅读,您可能希望以流的形式阅读并在每次阅读流时都从头开始。但是如果你现在想做什么但要让第二次读取工作,你可以在第一次读取之后寻找到流的开头,就像这样。

await httpContent.LoadIntoBufferAsync();
var X = await httpContent.ReadAsAsync<T>();

Stream stream = await httpContent.ReadAsStreamAsync();
stream.Seek(0, SeekOrigin.Begin);

var Y = await httpContent.ReadAsAsync<Dictionary<string, object>>();

关于c# - 多次调用 HttpContent ReadAsAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26942514/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com