[英]How to return a stream from an MVC view?
我相信我已經很接近了,但是我的信息流為null或已被丟棄。 這是示例代碼。
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,因為流已被丟棄。 如果我將return移至using之外,則結果為null。 我在這里做錯了什么? 有什么想法可以使我正常工作嗎?
StreamWriter
上的using語句還將關閉基礎流。 刪除StreamWriter
上的using
語句以使流保持活動狀態。
另一種選擇是返回字節數組而不是內存流。
return ms.ToArray();
要在using
塊中使用一個類,該類必須實現IDisposable
。 塊結束時,它將調用IDisposable.Dispose()
來處理您的Stream。 這是一個好習慣,但是如果要使用流,請刪除using
或將return放入其中。 我會選擇第二種選擇。
您有2個用法,他說的是使用()將返回值放入外面
像這樣
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.