Ответ 1
Абстракция для IFormFile
имеет метод .OpenReadStream
.
Чтобы предотвратить массу нежелательных и потенциально больших выделений, мы должны читать по одной строке за раз и составлять наш список из каждой строки, которую мы читаем. Кроме того, мы могли бы заключить эту логику в метод расширения. Действие Index
выглядит примерно так:
public List<string> Index(IFormFile file) => file.ReadAsList();
Соответствующий метод расширения выглядит следующим образом:
public static List<string> ReadAsList(this IFormFile file)
{
var result = new StringBuilder();
using (var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.AppendLine(reader.ReadLine());
}
return result;
}
Также у вас может быть и версия async
:
public static async Task<string> ReadAsStringAsync(this IFormFile file)
{
var result = new StringBuilder();
using (var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.AppendLine(await reader.ReadLineAsync());
}
return result.ToString();
}
Тогда вы можете использовать эту версию следующим образом:
public Task<List<string>> Index(IFormFile file) => file.ReadAsListAsync();