Ответ будет зависеть от того, нуждаетесь ли вы, как упоминает Забытая точка с запятой, в необходимости повторных загрузок или одноразовых раздач.
В любом случае, ключом будет установка типа содержимого вывода, чтобы обеспечить отображение окна загрузки. Проблема с прямым выводом текста заключается в том, что браузер пытается отобразить данные в своем собственном окне.
Основной способ установки типа контента будет примерно таким, как показано ниже, при условии, что текст является выходной строкой, а имя файла - это имя по умолчанию, в котором вы хотите сохранить файл (локально) как.
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ContentType = "application/octet-stream";
response.Charset = "";
response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", filename));
response.Flush();
response.Write(text);
response.End();
Это вызовет загрузку для пользователя.
Теперь становится сложнее, если вам нужно буквально сохранить файл на вашем веб-сервере - но не так ужасно. Там вы хотите записать текст в ваш текстовый файл, используя классы в System.IO. Убедитесь, что путь, по которому вы пишете, доступен для записи пользователям сетевой службы, IUSR_MachineName и ASPNET Windows. В противном случае та же сделка - используйте тип контента и заголовки, чтобы обеспечить загрузку.
Я бы порекомендовал не сохранять файл буквально, если вам не нужно - и даже в этом случае техника выполнения этого непосредственно на сервере может оказаться неправильной идеей. (Например, что если вам нужен контроль доступа для загрузки указанного файла? Теперь вам придется делать это вне корня приложения, что может или не может быть возможным в зависимости от среды вашего хостинга.)
Таким образом, не зная, находитесь ли вы в режиме «один раз» или «файл должен быть действительно сохранен», и не зная о последствиях для безопасности (что вам, вероятно, придется решить самостоятельно, если вам действительно нужны сохранения на стороне сервера) это самое лучшее, что я могу тебе дать.