C# 向浏览器提供流 - 可以做到吗?
C# Serving a stream to a browser - can it be done?
我正在尝试从 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;
这占用了我周末的大部分时间,所以如果有人能提供一些明确的见解,我会很高兴。
我通过反复试验和大量研究找到了答案:
是的,可以做到。
不使用 StreamContent,而是使用 ByteArrayContent:
例如
result.Content = new ByteArrayContent( stream.GetBuffer() );
确保没有设置 HttpResponseMessage.ContentLength 否则它将无法工作(连接重置)- 我花了几个小时才弄明白。
我正在尝试从 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;
这占用了我周末的大部分时间,所以如果有人能提供一些明确的见解,我会很高兴。
我通过反复试验和大量研究找到了答案:
是的,可以做到。
不使用 StreamContent,而是使用 ByteArrayContent: 例如
result.Content = new ByteArrayContent( stream.GetBuffer() );
确保没有设置 HttpResponseMessage.ContentLength 否则它将无法工作(连接重置)- 我花了几个小时才弄明白。