我有一个函数,它的结尾是下面所示的块。
using (var stream = new MemoryStream(someBytes))
{
var result = new HttpResponseMessage { Content = new StreamContent(stream) };
return result;
}
然而,在另一个文件中,这个结果被用在这样的一行中。
var justSomeString = returnedResultFromAbove.Content.ReadAsStringAsync().Result;
这会导致以下错误
System.Net.Http.HttpRequestException: 复制内容到流时出错。---> System.ObjectDisposedException.System.Http.HttpRequestException: Error while copying content to a Stream: 无法访问一个封闭的Stream。
解决这个问题的最好方法是什么?我是否应该不把我的MemoryStream包在使用块中?有没有一种方法可以让它保持足够长的打开时间,以便被读取,然后被处理?
你的流是由using语句包装的。当退出方法时,using语句将立即处理流。为了达到你的目的,你需要将处置责任传递给调用者。你需要把using语句放在调用者方法中。
using(var stream = GetMyStream())
{
// do some work
}