Проблема кодирования с фильтром ответа в asp.net

Я имею дело с некоторым кодом, который использует настраиваемый фильтр HttpResponse в приложении asp.net.

response.Filter = new HtmlResponseFilterStream();

Этот HtmlResponseFilterStream наследуется от MemoryStream. Метод записи был переопределен для получения содержимого ответа HTTP. Я использую Encoding.UTF8.GetString для получения содержимого страницы по частям.

public override void Write(byte[] buffer, int offset, int count)
{
        var contentInBuffer = Encoding.UTF8.GetString(buffer);

        ...
 }

На моем локальном компьютере, если я перехожу на любую страницу и отлаживаю код, я вижу переменную contentInBuffer, заполненную фактическим содержимым html. Оба с местным ISS или ISS Express. Это также работает в нашей производственной среде.

Однако, если я перейду к тестовой машине, все будет работать не так, как ожидалось. Если я отлаживаю содержимое внутри метода записи (используя удаленный отладчик). Вместо этого я получаю какие-то странные символы. Так что я предполагаю, что это связано с использованием какой-то другой кодировки.. может быть..

И рабочие, и тестовые серверы имеют одинаковые характеристики с одинаковыми версиями ОС и серверов iis.

Я проверил настройки .Net Globalization и установил кодировку UTF-8 для заголовков запроса, ответа и ответа на обеих машинах.

Я почти уверен, что это должно быть что-то, связанное с настройками среды. Не уверен, связано ли это с IIS или окнами.

Любая идея?


person Asier Barrenetxea    schedule 09.07.2015    source источник


Ответы (1)


Странные символы должны быть из-за сжатия GZip, это называется «динамическое сжатие», которое обычно не устанавливается по умолчанию, но похоже, что оно есть на вашей тестовой машине.

person Akash Kava    schedule 09.07.2015
comment
Извините, я не упомянул, что уже проверил динамическое сжатие и оно включено на всех серверах. Так не должно быть - person Asier Barrenetxea; 10.07.2015