Недавно я разработал пользовательский веб-элемент управления, в котором перечислены серии отчетов. Когда пользователь нажимает на отчет, он возвращает загрузку файла CSV в поток ответов, используя следующий код:
Response.Clear();
Response.ContentType = "text/CSV";
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;
Response.AddHeader("Pragma", "must-revalidate");
Response.AddHeader("Cache-Control", "must-revalidate");
Response.AddHeader("Accept-Header", csvResults.Length.ToString());
Response.AddHeader("Content-Length", csvResults.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=test.csv");
Response.Write(csvResults.ToString());
Response.Flush();
Response.End();
Код изначально работал нормально во всех браузерах. Затем клиент выставил требование использовать SSL для сайта. В рамках этого я представил глобальный обработчик для обновления протокола с HTTP на HTTPS для всех запросов следующим образом:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string requestURL = Request.Url.ToString().ToLower();
if (requestURL.StartsWith("http://"))
{
Response.Redirect(requestURL.Replace("http:", "https:"));
}
}
Однако, поскольку защита сайта с использованием SSL, загрузка файлов CSV больше не работает для IE, хотя они продолжают работать для Firefox / Chrome / Safari.
Есть ли что-то, чего мне не хватает в заголовках, которые уникальны для IE для правильной работы ответа файла?
Сообщение, которое я получаю от IE:
"Internet Explorer не может загрузить
Reports.aspx из .... в ......
Не удалось открыть Internet Explorer
этот интернет-сайт. Запрашиваемый сайт
либо недоступен, либо не может быть
найденный. Пожалуйста, попробуйте позже. "
UPDATE:
Вот несколько примеров вывода fiddler, возвращающегося из запроса страницы, который выглядит так, как будто он работает правильно Почему IE не понимает, что ему только что подали файл?
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:23:50 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Pragma: no-cache
Pragma: must-revalidate
content-disposition: attachment; filename="test.csv"
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Content-Length: <length value would be here>
Content-Type: text/CSV
"COL1","COL2","COL3"
"VAL1","VAL2","VAL3"
"VAL1","VAL2","VAL3"
"VAL1","VAL2","VAL3"