Как установить заголовок страницы для файла Ashx? - PullRequest
1 голос
/ 05 ноября 2011

Я хотел бы изменить «заголовок страницы» для открытого окна, когда пользователь просматривает файл Ashx в браузере. Пользователи нажимают на документ, который открывается на новой вкладке в браузере, и документ отображается (то есть Word, Excel, PDF и т. Д.). Что происходит сейчас, так это то, что заголовок страницы показывает что-то вроде «file.ashx? Id = 5», когда я предпочел бы, чтобы заголовок отображал что-то вроде «New Document.pdf» или просто «Новый документ» вместо отображения URL-адреса ashx. файл.

Я посмотрел на установку имени файла через заголовок, который работает, но файл загружается вместо простого открытия в более широком окне. Это не желаемое поведение, за которое я шел.

Я понимаю, что это может быть невозможно, но я все равно решил проверить.

Спасибо за помощь.

1 Ответ

6 голосов
/ 05 ноября 2011

Для заголовка страницы: я могу говорить только с Internet Explorer, но когда вы открываете новое окно, Internet Explorer требует, чтобы строка заголовка всегда отображалась (см. Статью MSDN Об ограничениях окна Больше подробностей). Проблема при просмотре встроенных файлов заключается в том, что вы не отправляете какой-либо HTML обратно на страницу, поэтому нет способа изменить заголовок этого метода.

Я знаю, что мы экспериментировали с несколькими различными подходами, но решили, что для нашей пользовательской базы было бы нормально не иметь удобочитаемого значения в строке заголовка. Если это важно для вас, то я думаю, что единственным реальным вариантом было бы решение на основе фреймов, где ваша страница Ashx встроена во фрейм (или iframe), а титульная страница контролируется контентом в другом фрейме (или части страница в том случае, если вы используете iframe).

Чтобы просмотреть файл в браузере, а не загружать его: вам нужно установить для Response ContentType соответствующий MimeType для файла (то есть «application / pdf» для файлов PDF) и добавить заголовок Content-Disposition, который указывает файл должен быть открыт в строке и имя файла для пользователя. Вы также должны убедиться, что другой контент и заголовки удалены из ответа.

this.Context.Response.ClearContent();
this.Context.Response.ClearHeaders();
this.Context.Response.ContentType = "application/pdf";
this.Context.Response.AddHeader("Content-Disposition", "inline; filename=mytest.pdf");
this.Context.Response.TransmitFile(sLocalFileName);
this.Context.Response.Flush();
...