Вы должны быть в состоянии сделать следующее:
public List<string> Index(IFormFile file)
{
var result = string.Empty;
using (var reader = new StreamReader(file.OpenReadStream()))
{
result = reader.ReadToEnd();
}
return string.IsNullOrEmpty(result)
? null
: result.Split('\n').ToList();
}
Абстракции для IFormFile
имеет .OpenReadStream
метод.
Update
Чтобы предотвратить тонну нежелательных и потенциально больших ассигнований, мы должны читать одну строку, в то время, и строить наш список из каждой строки таким образом. Кроме того, мы можем инкапсулировать эту логику в метод расширения. Index
действие заканчивает тем, как это:
public List<string> Index(IFormFile file) => file.ReadAsList();
Соответствующий метод расширения выглядит следующим образом:
public static List<string> ReadAsList(this IFormFile file)
{
var result = new List<string>();
using (var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.Add(reader.ReadLine());
}
return result;
}
Точно так же вы могли бы иметь async
версию, а также:
public static async Task<List<string>> ReadAsListAsync(this IFormFile file)
{
var result = new List<string>();
using (var reader = new StreamReader(file.OpenReadStream()))
{
while (reader.Peek() >= 0)
result.Add(await reader.ReadLineAsync());
}
return result;
}
Тогда вам может использовать эту версию таким образом:
public Task<List<string>> Index(IFormFile file) => file.ReadAsListAsync();
:
это работало, хотя оно не принимало Environment.NewLine, поэтому я использовал 'Split ('\ n')', что-то о желании char вместо строки – BigOmega
Зачем вам читать все это в одну строку, тогда Split then Составить список? Почему бы просто не прочесть его по строкам и добавить в список? Вышеупомянутый код выделяет потенциально гигантскую строку, чтобы затем выделить массив, а затем распределяет список. – davidfowl
Большое наблюдение. Я просто показывал, как это можно сделать, я обновляю код - спасибо. –