首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# MemoryStream -此流不支持超时。

C# MemoryStream -此流不支持超时。
EN

Stack Overflow用户
提问于 2018-01-01 17:18:32
回答 1查看 37.1K关注 0票数 4

我试图动态地创建一个csv文件,并将流输出到浏览器。

以下是我的api端点:

代码语言:javascript
运行
复制
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("export-to-csv")]
    public FileStreamResult ExportDeposits([FromUri(Name = "")]DepositSearchParamsVM depositSearchParamsVM)
        {
            if (depositSearchParamsVM == null)
            {
                depositSearchParamsVM = new DepositSearchParamsVM();
            }
            var records = _DepositsService.SearchDeposits(depositSearchParamsVM);
            var result = _DepositsService.WriteCsvToMemory(records);
            var memoryStream = new MemoryStream(result);

            return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
    }

以下是我的服务方法:

代码语言:javascript
运行
复制
public byte[] WriteCsvToMemory(IEnumerable<DepositSummaryVM> records)
        {
            using (var stream = new MemoryStream())
            using (var reader = new StreamReader(stream))
            using (var writer = new StreamWriter(stream))
            using (var csv = new CsvWriter(writer))
            {
                csv.WriteRecords(records);
                writer.Flush();
                stream.Position = 0;
                var text = reader.ReadToEnd();

                return stream.ToArray();

}

代码语言:javascript
运行
复制
    }

以下是错误消息:

{“消息”:“发生错误。”、"exceptionMessage":“在System.IO.MemoryStream‘上从'ReadTimeout’获取值时出错。” exceptionType:"Newtonsoft.Json.JsonSerializationException", “Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object”:“at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter目标)\r\n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter编写器、对象值、JsonContainerContract契约、JsonProperty成员、JsonProperty属性、JsonContract& memberContract、Object& memberValue)r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter编写器、对象值、JsonObjectContract契约、JsonProperty成员、JsonContainerContract collectionContract、JsonProperty containerProperty)\r\n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter编写器、对象值、JsonContract JsonContract,Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter编写器的JsonProperty成员,JsonContainerContract containerContract,JsonProperty containerProperty)\r\n at JsonContainerContract编写器,Object value,JsonObjectContract契约,JsonProperty成员,JsonContainerContract collectionContract,JsonProperty containerProperty)\r\n at JsonContainerContract collectionContract,JsonProperty containerProperty)\r\n at JsonContract valueContract,JsonProperty member,JsonContract)\r在,对象值,\r\n在Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter类型中\r\n在System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type类型中\\r\n在System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type类型中\\r\n在System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type类型下\\r\n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type类型、对象值、对象值、流writeStream,\r\n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type类型、对象值、流writeStream、HttpContent内容、transportContext TransportContext、\r)\r\n--从抛出异常的前一个位置开始的堆栈跟踪- System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务中的-\r\n)\r\n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务上)\r\n在System.Web.Http.Owin.HttpMessageHandlerAdapter.d__13.MoveNext()","innerException":{“消息”:“发生了错误”,"exceptionMessage":“超时在此流中不受支持。”、"exceptionType":"System.InvalidOperationException“、"stackTrace":”at System.IO.Stream.get_ReadTimeout()\r\n at GetReadTimeout(Object )\r\n at GetReadTimeout目标“}}

EN

回答 1

Stack Overflow用户

发布于 2018-01-01 17:51:17

Api正在尝试将MemoryStream序列化为json。那么,你会尝试改变ContentType

代码语言:javascript
运行
复制
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("export-to-csv")]
    public FileStreamResult ExportDeposits([FromUri(Name = "")]DepositSearchParamsVM depositSearchParamsVM)
    {
        if (depositSearchParamsVM == null)
        {
            depositSearchParamsVM = new DepositSearchParamsVM();
        }
        var records = _DepositsService.SearchDeposits(depositSearchParamsVM);
        var result = _DepositsService.WriteCsvToMemory(records);
        var memoryStream = new MemoryStream(result);
        Response.ContentType = new MediaTypeHeaderValue("application/octet-stream").ToString();// Content type
        return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
    }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48051683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档