我最近開發了一個列出一系列報告的Web用戶控件。當用戶點擊報告它使用下面的代碼提供早在響應流中的CSV文件下載:爲什麼IE無法從Response.Write服務我的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:
下面是一些例子提琴手輸出的頁面請求,它看起來像它的服務正確回來。爲什麼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"
在請求啓動之前,頁面被定義爲HTTPS,提琴手確認。 – 2010-11-09 13:03:36
嗯。點擊報告時網址是什麼樣的?它是提供csv文件的頁面的相對路徑嗎? – 2010-11-09 13:11:47
這是回送響應的相同頁面。每個報告都有一個鏈接,當用戶單擊鏈接時,上面的第一個示例代碼塊將使用csvResults變量中正確的csv數據執行。 – 2010-11-09 13:29:38