ASP.NET настраиваемый HTTPModule - как узнать, когда пишется последний блок HTML в методе Write? - PullRequest
1 голос
/ 02 июля 2010

Я написал модуль Http, который подключается к свойству Response.Filter текущего запроса и выполняет различные замены в HTML-коде перед его отправкой клиенту.

Вся работа выполняется в методе Write, который переопределяет запись в базовом классе Stream.

Метод Write вызывается несколько раз для одного ответа - HTML кажется записанным в выходной поток кусками. Моя проблема в том, что у меня нет эффективного и надежного способа узнать, является ли текущий кусок последним (почему я хочу это узнать, см. Ниже). Единственный способ, которым я придумал, это проверить, содержит ли блок закрывающий тег html, но это не очень эффективно и не надежно.

Причина, по которой это необходимо, заключается в том, что модуль должен добавить HTTP-заголовок «Обновить» к ответу, но только если HTML удовлетворяет определенным условиям (и существуют определенные условия, которые означают, что заголовок не должен быть добавлен). Таким образом, только когда последний фрагмент будет просмотрен, код узнает, можно ли добавить заголовок или нет. Итак, мне либо нужен тест для последнего блока, либо при каждом вызове Write я добавляю заголовок, если текущий блок HTML проходит тест (если он еще не был добавлен), или удаляю заголовок, если текущий блок HTML не проходит тест (если он уже был добавлен).

Итак, есть ли лучший способ проверить последний патрон ИЛИ есть ли способ проверить наличие определенного заголовка в ответе и удалить его (кажется, нет способа сделать это - только для добавить заголовки)?

Спасибо

1 Ответ

0 голосов
/ 02 июля 2010

Если вы можете выяснить общее количество байтов, которые будут записаны из вашего HTML-источника, просто посчитайте байты, когда вы вызываете Write (), чтобы выяснить, когда вы пишете последний блок.

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

...