gpt4 book ai didi

c# - IEnumerable 到 FileStreamResult 的 Stream

转载 作者:行者123 更新时间:2023-11-30 14:56:28 25 4
gpt4 key购买 nike

我有一个 IEnumerable<string> ,根据 yield 进行“流式传输”来自方法的语句。现在我想将此枚举转换为 Stream将其用作流结果。我有什么想法可以做到这一点吗?

我最后想做的是返回 Stream作为FileStreamResult从 ASP.NET Controller 操作。此结果应作为下载流式传输到客户端。

我不想做的是写下 IEnumerable 的全部内容在我返回结果之前到流中。这将消除流媒体概念的整体意义。

最佳答案

您必须创建 ActionResult 类才能实现惰性求值。您已经创建了 ContentResultFileStreamResult 类的混合,以实现类似 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);
}
}
}
}

关于c# - IEnumerable<string> 到 FileStreamResult 的 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830393/

25 4 0