Во-первых, вы используете метод async, поэтому вам нужно его ждать;
01 MemoryStream m = new MemoryStream();
02 await Request.Files[0].InputStream.CopyToAsync(m);
03 ToDo(NameOfFile, m);
Или просто используйте CopyTo()
. Если вы не дожидаетесь в строке 02, работа не будет завершена по строке 03.
Во-вторых, поскольку входной поток принадлежит запросу, я бы поспорил, что после завершения веб-запроса все он очищается, и ваш поток пытается скопировать содержимое запроса слишком поздно.
Можете ли вы просто переместить строки 01 и 02 в основной поток запроса? Что-то больше похоже;
public Task<ActionResult> DoFileStuff()
{
MemoryStream m = new MemoryStream();
await Request.Files[0].InputStream.CopyToAsync(m);
new Thread(DoMoreWork).Start();
}
Вы получаете идею - загрузить поток запроса в поток памяти перед тем Метод Действие заканчивается.
Пожалуйста, прочитайте об использовании асинхронных методов в C#. Также при показе образца кода обязательно соблюдайте надлежащую практику в переменных имен (определенно 'm' не является хорошим описательным именем), располагая объекты с помощью' use' (см. [MCVE] для получения дополнительных указаний). –