使用查询字符串参数和IE6 / 7重定向到EXE

时间:2008-11-17 19:35:53

标签: asp.net c#-3.0

问候!

我正在挠头,想知道为什么当我做以下事情时:

Response.Redirect(@"http://www.example.com/file.exe?id=12345");

IE6和IE7都会将文件下载为“文件”(没有扩展名),但Firefox,Opera,Google Chrome和Safari都没有任何问题将文件下载为“file.exe”。

知道IE6 / 7的问题是什么以及如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您是否尝试在响应标头中设置正确的内容类型?例如:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="file.exe"

答案 1 :(得分:0)

您可能需要远程获取文件大小并将其添加到标题部分的Content-Length。

答案 2 :(得分:0)

如果您使用fiddler2(http://www.fiddler2.com/fiddler2/),您可以确切地看到哪些标头被发送到IE,这可能有助于您进行调试。

也许您可以在此处发布结果标题?

我怀疑在重定向之前添加Content-Type和Content-Disposition会产生任何影响,因为浏览器会看到重定向标头并向重定向的url发出一个全新的http请求,这将是一个完全不同的集合标题。

但是,您可以尝试使用Server.Transfer作为服务器端重定向,如下所示:

Response.Clear(); //In case your .aspx page has already written some html content
Response.AddHeader("Content-Type", "application/octet-stream");
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe
Response.AddHeader("Content-Disposition", disp);

Server.Transfer(@"http://www.example.com/file.exe?id=12345");

或者,使用Response.BinaryWrite:

Response.Clear(); //In case your .aspx page has already written some html content
byte[] exeContent = ... //read the content of the .exe into a byte[]

Response.AddHeader("Content-Type", "application/octet-stream");
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe
Response.AddHeader("Content-Disposition", disp);

Response.BinaryWrite(exeContent);