在 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);
我正在尝试创建一个接受 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);