我正在尝试(但失败)从Request.HttpContent对象获取实际的JSON字符串。
这是我在做什么:
private async Task<string> GetRequestBodyAsString(HttpContent content)
{
string result;
using (var streamCopy = new MemoryStream())
{
await content.CopyToAsync(streamCopy);
streamCopy.Position = 0;
result = new StreamReader(streamCopy).ReadToEnd();
}
return result;
}
我的问题是,在执行此代码时,我总是得到一个空字符串-除非我在将streamCopy位置设置为零的行上使用断点,否则我会认为代码在触发后仍会继续执行CopyToAsync方法。
如果我将其更改为:
using (var streamCopy = new MemoryStream())
{
do
{
count++;
await content.CopyToAsync(streamCopy);
} while (streamCopy.Length == 0);
streamCopy.Position = 0;
result = new StreamReader(streamCopy).ReadToEnd();
}
它总是正确地工作(例如,结果将包含JSON,但这闻起来...很臭。
我在这里做什么错了?
答案 0 :(得分:1)
我遇到了同样的问题,并试图采用您的解决方案。但是根据here,通过进一步的谷歌搜索,我找到了一个更好的解决方案。原始代码将写入文件,但是这个想法仍然适用。
诀窍是避免使用CopyToAsync
,而直接使用ReadAsStreamAsync
。经过较小的更改后,结果如下所示:
using (Stream ms = await content.ReadAsStreamAsync())
{
using (var reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
}