ASP.NET: спецификация в Server.Execute () - PullRequest
2 голосов
/ 17 ноября 2009

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 ноября 2009

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

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(...));
1 голос
/ 17 ноября 2009

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

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

...