Jim*_*ely 8 c# csv memorystream csvhelper
我正在尝试动态创建 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" };
}
Run Code Online (Sandbox Code Playgroud)
这是我的服务方法:
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();
Run Code Online (Sandbox Code Playgroud)
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
{ "message": "发生错误。", "exceptionMessage": "从 'System.IO.MemoryStream' 上的 'ReadTimeout' 获取值时出错。",
exceptionType”:“Newtonsoft.Json.JsonSerializationException”,
"stackTrace": " 在 Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象目标)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer、对象值、JsonContainerContract 合约、JsonProperty 成员、JsonProperty 属性、JsonContract& memberContract、Object& memberValue)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer、对象值、JsonObjectContract 契约、JsonProperty 成员、JsonContainerContract collectionContract、JsonProperty containerProperty)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter .SerializeValue(JsonWriter writer, 对象值, JsonContract valueContract, JsonProperty 成员, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, 对象值, JsonObjectContract 契约, JsonProperty 成员, JsonContainerContract collectionContract 、 JsonProperty containerProperty)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer、对象值、JsonContract valueContract、JsonProperty 成员、JsonContainerContract containerContract、JsonProperty containerProperty)\r\n 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter。序列化(JsonWriter jsonWriter,对象值,类型 objectType)\r\n 在 Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,对象值,类型 objectType)\r\n 在 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流 writeStream、编码 effectiveEncoding)\r\n 在 System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流 writeStream、编码 effectiveEncoding)\r\n 在 System.Net。 Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型,对象值,流 writeStream,HttpContent 内容)\r\n 在 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型类型,对象值,流 writeStream,HttpContent 内容,TransportContext TransportContext、CancellationToken CancelToken)\r\n--- 从先前引发异常的位置开始的堆栈跟踪结束 ---\r\n 位于 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\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 在 GetReadTimeout(Object )\r\n 在 Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)" } }
Api 正在尝试将其序列MemoryStream
化为 json。那么,你会尝试改变吗ContentType
?
[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" };
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51577 次 |
最近记录: |