这个问题在这里已有答案:
我正在尝试动态创建一个csv文件并将流输出到浏览器 .
这是我的api终点:
[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" };
}
这是我的服务方法:
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();
}
}
这是错误消息:
{“message”:“发生了错误 . ”,“exceptionMessage”:“在'System.IO.MemoryStream'上从'ReadTimeout'获取值时出错 . ”,“exceptionType”:“Newtonsoft.Json.JsonSerializationException”,“ stackTrace“:”at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\ r \ n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer,Object value,JsonContainerContract contract,JsonProperty member,JsonProperty property,JsonContract&memberContract) ,对象&memberValue)\ r \ n在Newtonsoft.Json.Serialization.JsonSerializer.JsonSerializerInternalWriter中的Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer,Object value,JsonObjectContract contract,JsonProperty成员,JsonContainerContract collectionContract,JsonProperty containerProperty)\ r \ n . SerializeValue(JsonWriter writer,Object value,JsonContract valueContract,JsonProperty成员,JsonContainerContract containerContract,JsonProperty conta inerProperty)\ r \ n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer,Object value,JsonObjectContract contract,JsonProperty member,JsonContainerContract collectionContract,JsonProperty containerProperty)\ r \ n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue( JsonWriter编写器,Object值,JsonContract valueContract,JsonProperty成员,JsonContainerContract containerContract,JsonProperty containerProperty)\ r \ n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter,Object value,Type objectType)\ r \ n在Newtonsoft.Json .JsonSerializer.SerializeInternal(JsonWriter jsonWriter,Object value,Type objectType)\ r \ n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,Encoding effectiveEncoding)\ r \ n在System . Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,Encodin在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型,对象值,流writeStream,HttpContent内容)\ r \ n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型)中的有效编码)\ r \ n type,Object value,Stream writeStream,HttpContent content,TransportContext transportContext,CancellationToken cancellationToken)\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n在System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess(任务任务)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Owin.HttpMessageHandlerAdapter.d__13.MoveNext()“,”innerException“: {“message”:“发生错误 . ”,“exceptionMessage”:“此流不支持超时 . ”,“exceptionType”:“System.InvalidOperationException”,“stackTrace”:“在System.IO.Stream . get_ReadTimeout()\ r \ n在Newtonsoft.Json的GetReadTimeout(Object)\ r \ n中 . Serialization.DynamicValueProvider.GetValue(Object target)“}}
1 回答
Api正试图将
MemoryStream
序列化为json . 那么,你会尝试改变ContentType
;