2

在我们的 ASP.NET Core 1.1、EF Core 1.1 应用程序中,我们使用来自 SQL Server 的一些数据填充了一个字符串,并希望动态创建一个文本文件并让用户从客户端保存/下载。

在过去,我们曾经这样做:

List<string> stringList = GetListOfStrings();

MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);

foreach (string s in stringList) {
    tw.WriteLine(s);
}
tw.Flush();
byte[] bytes = ms.ToArray();
ms.Close();

Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=myFile.txt");
Response.BinaryWrite(bytes);
Response.End();

在 ASP.NET Core 1.1 中如何实现?尝试遵循ASP.NET Core中的文件提供程序无济于事。

4

1 回答 1

0
MemoryReader mr = new MemoryStream();
TextWriter tw = new StreamWriter(mr);

foreach (string s in stringList) {
    tw.WriteLine(s);
}
tw.Flush();

return File(mr, "application/force-download", "myFile.txt")

或者直接写回复:

HttpContext.Response.Body.WriteAsync(...);

也是可行的替代方案

TextWriter tw = new StreamWriter(HttpContext.Response.Body);

因此您可以直接写入输出字符串,而无需使用任何额外的内存。但是您不应该关闭它,因为它是与浏览器的连接,并且可能需要在管道中进一步进行。

于 2017-05-31T20:57:32.937 回答