我拨打以下电话:
var response = await Http.PostAsJsonAsync<List<CreateBookingPoLinesViewModel>>("api/downloadCsv", CreateBookingPoLinesViewModel);
这是我的方法:
[HttpPost]
public async Task<FileStreamResult> Post([FromBody] List<CreateBookingPoLinesViewModel> value)
{
try
{
MemoryStream ms = new MemoryStream();
var writer = new StreamWriter(ms);
var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
foreach (var line in value.Select(x => x.pOLineDTO))
{
csv.WriteRecord(line);
csv.Flush();
}
FileStreamResult result = new FileStreamResult(ms, "text/csv")
{
FileDownloadName = string.Format("PoLines-{0}.csv", value.First().pOLineDTO.PurchaseOrderId)
};
return result;
}
catch (Exception ex)
{
throw;
}
}
我对 post 方法的调用也在 try/catch 块中,并且两个 catch 块都没有被命中。我的 post 方法运行到
return result
行,我的代码已经经过 foreach
并且似乎正在写入记录。
当我的代码返回时,当我查看响应时,它有内部服务器错误 500。
有人知道我的帖子方法有什么问题吗?
归还之前,您需要通过设置
MemoryStream
来倒带您的 ms.Position = 0
。我还建议关闭 StreamWriter
和 CsvWriter
以确保刷新所有缓冲区:
var ms = new MemoryStream();
using (var writer = new StreamWriter(ms, leaveOpen : true)) // Leave the MemoryStream open after disposing of the writers
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
foreach (var line in value.Select(x => x.pOLineDTO))
csv.WriteRecord(line);
// Rewind the MemoryStream
ms.Position = 0;
var result = new FileStreamResult(ms, "text/csv")
{
FileDownloadName = string.Format("PoLines-{0}.csv", value.FirstOrDefault()?.pOLineDTO?.PurchaseOrderId)
};
return result;