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() передает обратно. Затем вы можете разобрать его и записать обратно в свой ответ.