Web API HttpResponseMessage内容返回不完整

布鲁诺·德普雷兹(Bruno Deprez)

我想返回使用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;

谢谢

达雷尔·米勒(Darrel Miller)

我将尝试在重置流之前执行writer.Flush().Position = 0

另外,如果您经常需要CSV内容,我还建议您为自己创建一个CsvContent类。

public class CsvContent<T> : HttpContent
    {
        private readonly MemoryStream _stream = new MemoryStream();
        public CsvContent(CsvFileDescription outputFileDescription, string filename, IEnumerable<T> data)
        {
            var cc = new CsvContext();
            var writer = new StreamWriter(_stream);
            cc.Write(data, writer, outputFileDescription);
            writer.Flush();
            _stream.Position = 0;

            Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
            Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
            Headers.ContentDisposition.FileName = filename;

        }
        protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
        {
            return _stream.CopyToAsync(stream);
        }

        protected override bool TryComputeLength(out long length)
        {
            length = _stream.Length;
            return true;
        }
    }

然后您的控制器动作减少到...

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

        CsvFileDescription outputFileDescription = new CsvFileDescription
        {
            SeparatorChar = ',', // comma delimited
            FirstLineHasColumnNames = true, // no column names in first record
            FileCultureName = "nl-NL" // use formats used in The Netherlands
        };
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK) {
           Content = new CsvContent<MasterObsTripModel> (outputFileDescription, 
                                                      "ObserverTripList.csv", 
                                                       masterTripModelList);
        }
        return response;

通过在CsvContent类内部创建CsvFileDescription,可以进一步简化此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

请求正文中的Facebook Messenger API内容不完整

来自分类Dev

Android:Rest API返回的响应不完整

来自分类Dev

Google Cal API返回不完整的事件资源

来自分类Dev

ASP.NET Web API帮助页面为F#记录类型生成不完整的文档

来自分类Dev

MIME多部分流的意外结尾。MIME分段消息不完整。Web API和超级代理

来自分类Dev

Nest API的数据不完整

来自分类Dev

Scaladoc 2.11.8 API不完整?

来自分类Dev

从 2.3 升级到 2.4 后 Facebook 图 API 返回不完整的对象

来自分类Dev

Web API返回XML内容

来自分类Dev

Asana API-如何仅获取不完整的任务?

来自分类Dev

Bigquery API的查询结果中的架构不完整

来自分类Dev

REST API如何处理不完整的答案

来自分类Dev

NodeJs API用不完整的对象响应

来自分类Dev

ADO API:构建列表不完整列表

来自分类Dev

Bigquery API的查询结果中的架构不完整

来自分类Dev

Web API 向浏览器返回 HttpResponseMessage 的描述

来自分类Dev

.NET Web API HttpResponseMessage模式?

来自分类Dev

Web API返回XML

来自分类Dev

Web API返回XML

来自分类Dev

API消耗问题或者API文档不完整,或者我不了解该API的实现

来自分类Dev

从ASP .NET Core Web API方法返回完整的XML响应

来自分类Dev

Web服务中的NHibernate“在创建SessionFactory时使用了无效或不完整的配置”

来自分类Dev

ASP.NET MVC Web App从MySQL数据库获取不完整的数据

来自分类Dev

Web API 加载内容文件

来自分类Dev

如何查看从 HttpResponseMessage (ASP.NET MVC Web Api) 传递的内容

来自分类Dev

Web API返回CSV文件

来自分类Dev

从Web API返回camelCased JSON

来自分类Dev

Web API不会返回对象

来自分类Dev

如何返回Web API数据

Related 相关文章

热门标签

归档