Это иногда случается, если пользователь использует Windows 10. Вам может потребоваться установить обновление, чтобы избежать запросов MFA.
Это также может произойти, если какая-либо форма MFA требуется на месте. https://blogs.technet.microsoft.com/cloudpfe/2017/03/15/multiple-mfa-prompts-connecting-to-office-365/
Еще один вариант, чтобы избежать Несколько запросов MFA - помнить MFA для доверенных устройств.
Я взял бы вещи за пределами конвейера "aspx". В частности, я записал бы, выполнил обработчик (ashx, или отобразился через конфигурацию), который делает минимум работа и просто пишет в ответ в блоках. Обработчик принял бы вход от строки запроса/формы как нормальный, определил бы местоположение объекта передать потоком, и передать данные потоком (использующий умеренно размерный локальный буфер в цикле). Простой (неполный) пример, показанный ниже:
public void ProcessRequest(HttpContext context) {
// read input etx
context.Response.Buffer = false;
context.Response.ContentType = "text/plain";
string path = @"c:\somefile.txt";
FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = context.Response.OutputStream;
using(Stream stream = File.OpenRead(path)) {
while (len > 0 && (bytes =
stream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, bytes);
len -= bytes;
}
}
}
Смотрите на следующее Отслеживание статьи и Возобновление Больших Загрузок Файла в ASP.NET , который даст Вам больше подробно, чем просто открытый поток и выгонит все биты.
http поддержка протоколов расположилась запросы байта и resumeable загрузки, и многие клиенты потоковой передачи (как видеоплееры или Adobe PDF) могут и пытаться разделить их на блоки, сохраняя пропускную способность и давая Вашим пользователям лучший опыт.
Не тривиальный, но время хорошо потраченное.
Попытайтесь открыть файл как поток, затем с помощью Ответа. OutputStream. Запишите (). Например:
Редактирование: Мое плохое, я забыл, что Запись берет буфер байта. Зафиксированный
byte [] buffer = new byte[1<<16] // 64kb
int bytesRead = 0;
using(var file = File.OpenRead(path))
{
while((bytesRead = file.Read(buffer, 0, buffer.Length)) != 0)
{
Response.OutputStream.Write(buffer, 0, bytesRead);
}
}
Response.Flush();
Response.Close();
Response.End();
Редактирование 2: Вы пробовали это? Это должно работать.
После попытки большого количества различных комбинаций, включая код, отправленный в различных ответах, это походит на установку Response. Буфер = верный прежде, чем назвать TransmitFile добился цели, и веб-приложение является теперь намного более быстро реагирующим в Internet Explorer.
В данном случае, расширение SWF также отображается на ASP.NET, и мы используем пользовательский обработчик в нашем веб-приложении, чтобы считать файлы из диска и затем отправить их к браузеру с помощью Ответа. TransmitFile (). У нас есть основанный на флэш-памяти видеоплеер для игры видеофайлов, которые являются также SWF's, и я думаю, имея все это действие, проходят обработчик без буферизации, то, что, возможно, вызывало странные вещи произойти в IE.