Перенаправление в EXE с параметрами строки запроса и IE6 / 7 - PullRequest
1 голос
/ 17 ноября 2008

Привет!

Я чешу голову, удивляясь, почему, когда я делаю следующее:

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

И IE6, и IE7 будут загружать файл как «файл» (без расширения), но у Firefox, Opera, Google Chrome и Safari нет проблем с загрузкой файла как «file.exe».

Есть идеи, в чем проблема IE6 / 7 и как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2008

Вы пытались установить правильный тип контента в заголовках ответа? Например:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="file.exe"
0 голосов
/ 19 ноября 2008

Если вы используете fiddler2 (http://www.fiddler2.com/fiddler2/), вы можете точно увидеть, какие заголовки отправляются в IE, что может помочь вам в отладке.

Возможно, вы можете опубликовать полученные заголовки здесь?

Я сомневаюсь, что добавление Content-Type и Content-Disposition перед перенаправлением окажет какое-либо влияние, так как браузер видит заголовок перенаправления и делает совершенно новый http-запрос к перенаправленному URL, который будет совершенно другим набором. заголовков.

Однако вы можете попробовать 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);
0 голосов
/ 17 ноября 2008

Возможно, вам потребуется удаленно получить размер файла и добавить его в Content-Length в разделе заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...