如何在内存中创建 Csv 并将其 return 发送给客户端?
How do I create Csv in memory and return it to client?
如何在内存中创建一个 csv 文件并将其 return 作为 FileStreamResult
?
我尝试写入 memorystream
,然后使用 FileStreamResult
写入 return,但我总是收到错误 ObjectDisposedException: Cannot access a closed Stream.
。我尝试将 leaveopen
设置为 true 并按照告诉 here 手动处理,但我仍然遇到相同的错误。
[HttpGet]
public FileStreamResult GetData()
{
var myResult = DataGetter.GetData().ToList();
using var memStream = new MemoryStream();
var writer = new StreamWriter(memStream, Encoding.UTF8, 1024, true);
var csv = new CsvWriter(writer, CultureInfo.InvariantCulture,true);
csv.WriteRecords(myResult );
var fileStreamResult = new FileStreamResult(memStream, "text/csv");
csv.Dispose();
writer.Dispose();
return fileStreamResult;
}
听起来有些东西被处理得太早了。在抛出错误之前,我通常会逐步查看代码到达的位置。
尝试从“using var memStream”行中删除 using(我发现 c# 8.0 using 语句有时不能完全按预期工作)或将其包装在传统的 using 块中。
当您处理 csv 或 writer 时,它们会处理基本流。只是不要处理任何流。 FileStreamResult 将在发送数据时处理 baseStream。
所以去掉这两行代码。
csv.Dispose();
writer.Dispose();
您需要将流的当前位置移动到开头:
memStream.Position=0;
FileStreamResul
将从流的当前位置开始读取。
如何在内存中创建一个 csv 文件并将其 return 作为 FileStreamResult
?
我尝试写入 memorystream
,然后使用 FileStreamResult
写入 return,但我总是收到错误 ObjectDisposedException: Cannot access a closed Stream.
。我尝试将 leaveopen
设置为 true 并按照告诉 here 手动处理,但我仍然遇到相同的错误。
[HttpGet]
public FileStreamResult GetData()
{
var myResult = DataGetter.GetData().ToList();
using var memStream = new MemoryStream();
var writer = new StreamWriter(memStream, Encoding.UTF8, 1024, true);
var csv = new CsvWriter(writer, CultureInfo.InvariantCulture,true);
csv.WriteRecords(myResult );
var fileStreamResult = new FileStreamResult(memStream, "text/csv");
csv.Dispose();
writer.Dispose();
return fileStreamResult;
}
听起来有些东西被处理得太早了。在抛出错误之前,我通常会逐步查看代码到达的位置。
尝试从“using var memStream”行中删除 using(我发现 c# 8.0 using 语句有时不能完全按预期工作)或将其包装在传统的 using 块中。
当您处理 csv 或 writer 时,它们会处理基本流。只是不要处理任何流。 FileStreamResult 将在发送数据时处理 baseStream。
所以去掉这两行代码。 csv.Dispose(); writer.Dispose();
您需要将流的当前位置移动到开头:
memStream.Position=0;
FileStreamResul
将从流的当前位置开始读取。