我有一个IEnumerable<string>
,这是“流式传输”的yield
来自方法的语句。现在我想将这个可枚举转换为Stream
将其用作流式结果。我有什么想法可以做到这一点吗?
我最终想做的是归还Stream
as FileStreamResult
来自 ASP.NET 控制器操作。该结果应作为下载流式传输到客户端。
我不想做的是写出整个内容IEnumerable
在返回结果之前到流中。这将消除流媒体概念的整体意义。
您必须创建 ActionResult 类才能实现惰性求值。您已经创建了以下组合ContentResult
an FileStreamResult
类来实现类似 FileStreamResult 的行为,并能够设置结果编码。好的起点是FileResult
抽象类:
public class EnumerableStreamResult : FileResult
{
public IEnumerable<string> Enumerable
{
get;
private set;
}
public Encoding ContentEncoding
{
get;
set;
}
public EnumerableStreamResult(IEnumerable<string> enumerable, string contentType)
: base(contentType)
{
if (enumerable == null)
{
throw new ArgumentNullException("enumerable");
}
this.Enumerable = enumerable;
}
protected override void WriteFile(HttpResponseBase response)
{
Stream outputStream = response.OutputStream;
if (this.ContentEncoding != null)
{
response.ContentEncoding = this.ContentEncoding;
}
if (this.Enumerable != null)
{
foreach (var item in Enumerable)
{
//do your stuff here
response.Write(item);
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)