ASP.NET: спецификация в Server.Execute()

Я использую это для записи в поток ответа:

    using (var writer = new StringWriter())
    {
        context.Server.Execute(virtualpath, writer);
        string s = writer.ToString().Replace(...);
        context.Response.Write(s);
    }

Но я получаю метку порядка байтов в ответе. Я испорчу кодировку? Как мне НЕ вернуть спецификацию?

РЕДАКТИРОВАТЬ: Извините, Рубенс, мой первый пример был неверным.

2 ответа

Попробуй это:

context.Server.Execute(virtualpath, context.Response.Output);

РЕДАКТИРОВАТЬ: Итак, попробуйте это, чтобы заставить вашу кодировку:

MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms);
context.Server.Execute(virtualpath, writer);
context.Response.Write(Encoding.UTF8.GetString(ms.ToArray()).Replace(...));

Server.Execute() возвращает закодированный поток, но StringWriter() предназначен для хранения простых строк.NET (которые являются 16-битными Unicode и не имеют спецификации) и не знает, как декодировать входящие байты. Таким образом, спецификация в ответе становится буквальными символами в вашей строке.

Попробуйте вместо этого записать в MemoryStream (), а затем декодировать его обратно в строку, используя любую кодировку (UTF-8 или любую другую), которую Server.Execute() передает обратно. Затем вы можете разобрать его и записать обратно в свой ответ.

Другие вопросы по тегам