使用LinqToCSV将CSV写入MemoryStream不会返回任何数据

时间:2013-03-15 15:36:36

标签: linq asp.net-mvc-4 memorystream

我已使用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"); 
    }

我觉得有趣的是,如果我将返回类型更改为contentResult,并将返回方法更改为Content()并将其传递给System.Text.Encoding.ASCII.GetString(ms.ToArray));,我会看到一个显示我的数据的浏览器窗口。

2 个答案:

答案 0 :(得分:5)

确保将流位置重置为0.还要确保在此之前刷新StreamWriter

答案 1 :(得分:4)

调用Web API方法从JavaScript返回CVS文件。

public HttpResponseMessage Bidreport([FromBody]int formData).....

从LINQ查询中填写IEnumerable<YourObject>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;
                }
            }