【发布时间】:2013-11-26 18:19:07
【问题描述】:
我想返回使用 Web API 5.0 从我的数据库生成的 csv 除了返回的 csv 被截断之外,它工作正常。
我认为问题出在 MemoryBuffer 管理上,但我找不到问题所在。
我的代码(已解决):
IEnumerable<MasterObsTrip> masterTripList = _obsvMasterRepo.GetObsTrips(vesselName, dateYear, port, obsvCode, obsvTripCode, obsvProgCode, lastModifiedDateYear, lastModifiedBy, statusCode);
IList<MasterObsTripModel> masterTripModelList = new List<MasterObsTripModel>();
foreach (MasterObsTrip trip in masterTripList)
masterTripModelList.Add(new MasterObsTripModel(trip));
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
CsvFileDescription outputFileDescription = new CsvFileDescription
{
SeparatorChar = ',', // comma delimited
FirstLineHasColumnNames = true, // no column names in first record
FileCultureName = "nl-NL" // use formats used in The Netherlands
};
CsvContext cc = new CsvContext();
cc.Write(masterTripModelList,writer,outputFileDescription);
writer.Flush();
stream.Position = 0;
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "ObserverTripList.csv";
stream.Flush();
return response;
谢谢
【问题讨论】:
-
避免调用
stream.Flush(),因为对流的实际写入发生在稍后...尝试看看这是否能解决您的问题.. -
感谢 Kiran,但删除流。Flush 不会改变任何东西
-
嗯,好的……我觉得其他一切都还可以……只是为了确保,您是否尝试过查看内存流中的实际内容并查看它是否包含全部内容?您可以尝试将此内存流写入磁盘文件,看看它是否确实包含全部内容...
-
是的,我在服务器上生成了文件,它包含我的整个数据集
-
嗯,我不确定发生了什么...您可以分享一个复制品吗? (您使用的是哪个版本的 Web API?)
标签: c# asp.net-web-api httpresponse