Dou*_*ain 3 linq memorystream asp.net-mvc-4
我已经验证使用System.Text.Encoding.ASCII.GetString(ms.ToArray));了我的内存流有预期的数据.
但是,使用LinqToCSV nuget库不会生成我的csv文件.我没有抛出任何错误或异常.当我提示打开文件时,我只得到一个空文件.
这是我的行动方法
public FileStreamResult Export(){
var results = _service.GetProperties().Take(3);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.TextWriter txt = new System.IO.StreamWriter(ms);
CsvFileDescription inputFileDescription = new CsvFileDescription{
SeparatorChar =',',
FirstLineHasColumnNames = true
}
;
CsvContext csv = new CsvContext();
csv.Write(results,txt,inputFileDescription);
return File(ms , "application/x-excel");
}
Run Code Online (Sandbox Code Playgroud)
我觉得有趣的是,如果我将返回类型更改为contentResult,并将返回方法更改为Content()并传递它,System.Text.Encoding.ASCII.GetString(ms.ToArray));我会得到一个显示我的数据的浏览器窗口.
小智 5
调用 Web API 方法从 JavaScript 返回 CVS 文件。
public HttpResponseMessage Bidreport([FromBody]int formData).....
Run Code Online (Sandbox Code Playgroud)
填写您的IEnumerable<YourObject>query= from LINQ query .... 这是如何返回它:
using (var ms = new MemoryStream())
{
using (TextWriter txt = new StreamWriter(ms))
{
var cc = new CsvContext();
cc.Write(query, txt, outputFileDescription);
txt.Flush();
ms.Position = 0;
var fileData = Encoding.ASCII.GetString(ms.ToArray());
var result = new HttpResponseMessage(HttpStatusCode.OK) {Content = new StringContent(fileData)};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-excel");
return result;
}
}
Run Code Online (Sandbox Code Playgroud)