如何从MVC视图返回一个流



我相信我相当接近,但我的流要么为空,要么已被处理。下面是示例代码:

var ms = new MemoryStream();
using (var sw = new StreamWriter(ms))
{
   using (var tw = new HtmlTextWriter(sw))
   {
    ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
    ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
    viewResult.View.Render(viewContext, tw);
    ms.Position = 0;
    return ms;
    }
}

调用代码导致objectDisposedException,因为流已被处置。如果我将返回值移到using之外,则结果为null。我哪里做错了?有什么办法能让它正常工作吗?

StreamWriter上的using语句也将关闭底层流。删除StreamWriter上的using语句以保持流存活。
另一个选项是返回字节数组而不是内存流。

return ms.ToArray();

要在using块中使用类,该类必须实现IDisposable。当块结束时,它调用IDisposable.Dispose()来处理你的流。这是一个很好的做法,但是如果您想要流,要么删除using,要么将返回值放入其中。我会选择第二个选项

你有两种用法他说的是使用()将返回值放入外部

like this

var ms = new MemoryStream();
using (var sw = new StreamWriter(ms))
{
   using (var tw = new HtmlTextWriter(sw))
   {
    ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, null);
    ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
    viewResult.View.Render(viewContext, tw);
    ms.Position = 0;
    }
  return ms;
}

相关内容

  • 没有找到相关文章

最新更新