我知道我可以使用以下代码从控制器操作返回文件:
public ActionResult SomeAction()
{
return File(PathToTheFile);
}
还有一个重载接受Stream而不是文件路径。
就我而言,我基于数据库查询动态创建CSV文件。将CSV文件直接写入响应并将响应视为文件会更简单。有可能吗?怎么样?
编辑
我假设我会写某种流,但是什么样的流和谁负责处理它?</ p>
答案 0 :(得分:2)
修改强>
当您动态创建输出并且希望避免创建文件和内存流以提高性能并避免额外的I / O时,一个简单的解决方案是直接写入Http Response。以下代码是一个适合我的示例。您可以对数据使用相同的方法。
public ActionResult getFile()
{
Response.AddHeader("Content-Disposition", "attachment; filename=myVFile.csv");
Response.ContentType = "text/csv";
//sample data
string[] data = { "-4", "-3", "-2", "-1", "0", "1", "2", "3" };
//Query data with LINQ - This can be done in diffrent ways
(from item in data
where
//Some conditions
item != "-4"
select
//Select whatever you want to be in the output
item
)
.ToList()
.ForEach(
//Write items from your LINQ Query to HTTP Response
item => Response.Write(item + ",")
);
//You can use a foreach loop instead of chaining ForEach in LINQ as above
Response.End();
return Content(null);
}