在我们的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中实现?试图跟随File Providers in ASP.NET Core无济于事。
答案 0 :(得分: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);
因此您可以直接写入输出字符串,而无需任何额外的内存使用。但是你不应该关闭它,因为它是与浏览器的连接,可能需要进一步加入管道。