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

returnタイプをcontentResultに変更し、returnメソッドをContent()に変更して渡すとSystem.Text.Encoding.ASCII.GetString(ms.ToArray));、データを表示するブラウザーウィンドウが表示されます。

4

2 に答える 2

5

ストリーム位置を0にリセットしてください。また、その前に必ずフラッシュしてくださいStreamWriter

于 2013-03-15T17:02:32.113 に答える
5

Web APIメソッドを呼び出して、JavaScriptからCVSファイルを返します。

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

= fromLINQクエリを入力してください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;
                }
            }         
于 2014-02-12T20:09:36.083 に答える