У меня есть HTTP-модуль, который я использую для очистки JSON, возвращенного моим веб-сервисом (см. Пример http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx?msg=3400287#xx3400287xx). В основном это относится к вызову междоменных веб-сервисов JSON из javascript.
Существует этот JsonHttpModule, который использует класс Stream JsonResponseFilter для записи JSON, а перегруженный метод Write должен обернуть имя функции обратного вызова вокруг JSON, в противном случае JSON выдает ошибку, поскольку требует метки. Однако, если JSON действительно длинный, метод Write в классе Stream вызывается несколько раз, в результате чего функция обратного вызова неправильно вставляется в середине JSON. Есть ли в классе Stream способ обернуть функцию обратного вызова в конце потока или указать, что он записывает весь метод JSON в 1 Write, а не в чанки ??
Вот где он вызывает JsonResponseFilter в Модуле JsonHttp:
public void OnReleaseRequestState(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
if (!_Apply(app.Context.Request)) return;
// apply response filter to conform to JSONP
app.Context.Response.Filter =
new JsonResponseFilter(app.Context.Response.Filter, app.Context);
}
Вот метод Write в классе Stream JsonResponseFilter, который вызывается несколько раз:
public override void Write(byte[] buffer, int offset, int count)
{
var b1 = Encoding.UTF8.GetBytes(_context.Request.Params["callback"] + "(");
_responseStream.Write(b1, 0, b1.Length);
_responseStream.Write(buffer, offset, count);
var b2 = Encoding.UTF8.GetBytes(");");
_responseStream.Write(b2, 0, b2.Length);
}
Спасибо за любую помощь!
Джастин