PostingAsJsonAsync 从被调用方法返回时会给出 500 错误

问题描述 投票:0回答:1

我拨打以下电话:

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。

有人知道我的帖子方法有什么问题吗?

c#
1个回答
0
投票

归还之前,您需要通过设置

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;
© www.soinside.com 2019 - 2024. All rights reserved.