C#向浏览器提供流 - 是否可以完成?

时间:2016-02-15 11:08:22

标签: c# file rest streaming

我正在尝试从REST API向浏览器输出文件 - 但我没有物理文件,而是有一个MemoryStream(我宁愿不写一个物理文件)。

这有效:

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(path, FileMode.Open);
result.Content = new StreamContent(stream);
return result;

这不是:

var stream = new MemoryStream();

// Iterate DataReader and populate MemoryStream code omitted for brevity.
// Assume MemoryStream has been written to correctly and contains data.

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
return result;

这已经消耗了我周末的大部分时间,所以如果有人能提供一些明确的见解,我会很高兴。

1 个答案:

答案 0 :(得分:0)

我通过反复试验和大量研究找到了答案:

是的,可以做到。

使用ByteArrayContent代替使用StreamContent: e.g。

result.Content = new ByteArrayContent( stream.GetBuffer() );

确保没有设置HttpResponseMessage.ContentLength,否则它将无法正常工作(连接重置) - 我需要花费数小时来解决这个问题。

相关问题