Это правильно, когда вы помещаете поток в другой поток, вызов .Close()
или .Dispose()
для любого из них приведет к удалению всего потока. В этом случае перенос MemoryStream
в StreamWriter
означает, что после завершения оператора using
оба значения StreamWriter
и MemoryStream
удаляются.
Полагаю, поскольку вы возвращаете FileStreamResult
, инкапсуляция File
закроет вам поток после того, как поток больше не используется. В этом случае вы не хотите использовать оператор using
и захотите оставить поток открытым при его возврате.
UPDATE
Поскольку поток является прямым доступом, вам нужно увидеть его в начале, чтобы можно было считывать данные обратно.
stream.Seek(0, SeekOrigin.Begin);