Мне нужно предоставить функцию загрузки файлов, где веб-сервер извлекает файл из другого источника (через HTTP) и одновременно передает его в браузер. Я предполагаю, что использование MVC Controller.File ActionResult не будет работать, но я все равно написал такой прототип:
public ActionResult Download()
{
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://somewhere/somefile.pdf");
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Stream stream = webResponse.GetResponseStream();
var mimeType = "application/pdf";
var fileName = "somefile.pdf";
return File(stream, mimeType, fileName);
}
Это работает нормально, но нет способа вызвать Close () для HttpWebResponse и Stream после оператора return. help в методе HttpWebResponse.GetResponseStream говорит: «Вы должны вызвать либо метод Stream.Close, либо HttpWebResponse.Close, чтобы закрыть поток и освободить соединение для повторного использования. Нет необходимости вызывать оба Stream .Close и HttpWebResponse.Close, но это не приводит к ошибке. Невозможность закрыть поток приведет к тому, что в вашем приложении не будет соединений. "
Должен ли я создать HttpHandler и вручную прочитать байты из исходного потока и записать их в ответ по строкам this или this ? Есть ли другой подход, о котором я не знаю?