IIS 7, кажется, удаляет явно установленный тип контента.Как я могу это остановить? - PullRequest
4 голосов
/ 28 октября 2011

У меня есть страница C #, которая генерирует PDF-файл и возвращает его пользователю.Я явно устанавливаю заголовок Content-Type на «application / pdf», и MIME-тип зарегистрирован в IIS, однако IIS, похоже, удаляет Content-Type.если я решу сохранить его на диск, я смогу его открыть.Если я запускаю страницу с сервера разработки ASP.NET, заголовок Content-Type проходит очень хорошо.

Код ...

byte[] pdf = //magic!
string filename = "Some.pdf";

Response.Clear();
Response.ClearHeaders();
//This way didn't work either...
//Response.ContentType = "application/pdf";
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + ";size=" + pdf.Length.ToString());
Response.Flush();
Response.BinaryWrite(pdf);
Response.Flush();
Response.End();

1 Ответ

1 голос
/ 28 октября 2011

У меня сейчас есть нечто очень похожее (оно позволяет пользователю загружать TXT-файл, сгенерированный в самом коде).

Тот же код, что и у вас, но у меня нет Response.Flush() где-либо.Вы можете попробовать закомментировать оба .Flush es и посмотреть, что произойдет.

отредактировано это мой код (успешно позволяет пользователю загрузить файл TXT

string filename = "myfile.txt"; //made up filename
Response.AddHeader("Content-disposition", "attachment; filename=" + filename);
Response.ContentType = "application/octet-stream";

byte[] data = new byte[Encoding.UTF8.GetByteCount(_r)]; //_r is a string containing my txt
data = Encoding.UTF8.GetBytes(_r);
Response.ContentEncoding = Encoding.UTF8; // handling special chars
Response.BinaryWrite(data); 
Response.End();
...