在 asp.net 核心端点读取 Csv

Read Csv on asp.net core endpoint

我正在尝试创建一个接受 CSV 文件的端点,但数据流 return 没有任何记录。

这是我的视图模型:

public class BulkUploadViewModel
{
    [Required]
    public IFormFile JobCsv { get; set; }
    [Required]
    public string UserId { get; set; }
}

这是我的终点:

[Route("BulkUpload")]
[HttpPost]
public async Task<IActionResult> BulkUpload(BulkUploadViewModel bulkUpload)
{
    if(!ModelState.IsValid)
    {
        return BadRequest();
    }

    List<BulkUploadDataModel> bulkList = new List<BulkUploadDataModel>();

    using (var memoryStream = new MemoryStream())
    {
        await bulkUpload.JobCsv.CopyToAsync(memoryStream);
        TextReader textReader = new StreamReader(memoryStream);

        var csv = new CsvReader(textReader);

        csv.Configuration.HasHeaderRecord = true;

        bulkList = csv.GetRecords<BulkUploadDataModel>().ToList();
    }

    return Ok(bulkList.Count());
}

我也试过逐行读取 CSV,但 Csv.Read() return 是错误的。我不确定如何调试它。

我正在用 postman:

生成 post

在调试器中,我可以看到文件名和长度值在 bulkUpload.JobCsv 中正确填充,所以我假设我的错误在于我访问流的方式。

我做错了什么?

我有 Asp.Net 项目,我在其中使用 Csv 包和此代码从文件中读取 csv:

using (var stream = bulkUpload.JobCsv.OpenReadStream())
{
    var csvLines = CsvReader.ReadFromStream(stream).ToList();
}


之后你还缺少memoryStream.Position = 0 await bulkUpload.JobCsv.CopyToAsync(memoryStream);.

像这样:

await bulkUpload.JobCsv.CopyToAsync(memoryStream);
memoryStream.Position = 0;
TextReader textReader = new StreamReader(memoryStream);