即时创建一个文本文件并将其 download/save 放在客户端

Creating a text file on the fly and have it download/save on client side

在我们的 ASP.NET Core 1.1、EF Core 1.1 应用程序中,我们用来自 SQL 服务器的一些数据填充了一个字符串,并希望动态创建一个文本文件,并且有一个来自客户端的用户 save/download。

以前我们是这样操作的:

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 中实现?尝试关注 File Providers in ASP.NET Core 无果。

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);

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