从API端点内访问泛型对象



通常我会在baseController中创建一个通用实体,然后将其导入到服务中,如下所示:

public async Task<IActionResult> CreateAsync(TEntity entity)
{
entity = await _service.CreateAsync(entity);
return Ok(entity);
}

我想做的是导入一个csv文件,从HttpPost语句中访问通用对象,并用文件的内容填充,然后像这样处理它:

public async Task<IActionResult> CreateAsyncCSV(string filePath)
{
int i = 0;
using (var reader = new StreamReader(filePath))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');
var entity = new HeaderText();
PropertyInfo[] properties = typeof(TEntity).GetProperties();
foreach (PropertyInfo property in properties)
{
property.SetValue(entity, values[i]);
i += 1;
}

}
}
return Ok();
}

但是我找不到一种方法来创建空白实体-这是可能的还是我应该每次我想这样做时都写一个专用的终点?

如果通过创建一个空白实体,你的意思是创建一个新的实体实例,你可以使用一个通用约束where TEntity : new(),它只要求你为每个实体类型有一个无参数的构造函数,然后你可以写new TEntity()有一个空白实体实例。

另外,因为你基本上想要读取CSV到c#对象中,你可以使用开源库,例如CSV helper,它内置支持将CSV读取到c#类记录中。

最新更新