【发布时间】:2011-01-26 16:32:55
【问题描述】:
我有一个 HTTP 模块,用于清理我的 Web 服务返回的 JSON(有关此示例,请参阅 http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx?msg=3400287#xx3400287xx。)基本上它与从 javascript 调用跨域 JSON Web 服务有关。
有这个 JsonHttpModule 使用 JsonResponseFilter Stream 类来写出 JSON,并且重载的 Write 方法应该将回调函数的名称包装在 JSON 周围,否则 JSON 会出错,因为需要标签。但是,如果 JSON 真的很长,Stream 类中的 Write 方法会被多次调用,导致回调函数错误地插入到 JSON 中途。 Stream 类中是否有办法在最后将回调函数包装在流周围,或者指定它将所有 JSON 写入 1 Write 方法而不是块中??
这里是调用 JsonHttpModule 中的 JsonResponseFilter 的地方:
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);
}
这是 JsonResponseFilter Stream 类中被多次调用的 Write 方法:
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);
}
感谢您的帮助! 贾斯汀
【问题讨论】: