Мне нужно предоставить функцию загрузки файлов, при которой веб-сервер извлекает файл из другого источника (через 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. справка по методу HttpWebResponse.GetResponseStream говорит: «Вы должны вызвать метод Stream.Close или HttpWebResponse.Close, чтобы закрыть поток и освободить соединение для повторного использования. Нет необходимости вызывать одновременно Stream.Close и HttpWebResponse.Close, но это не вызывает ошибка. Неспособность закрыть поток приведет к тому, что у вашего приложения закончатся соединения. "
Должен ли я создать HttpHandler и вручную прочитать байты из исходного потока и записать их в ответ в соответствии со строками this или это? Есть ли другой подход, о котором я не знаю?