J'ai un module HTTP que j'utilise pour nettoyer le JSON retourné par mon service web (voir http://www.codeproject.com/KB/webservices/ASPNET_JSONP.aspx?msg=3400287#xx3400287xx pour un exemple.) Fondamentalement, il s'agit d'appeler les services Web JSON interdomaines à partir de javascript.Json HTTP Module flux numéro
Il existe ce JsonHttpModule qui utilise une classe JsonResponseFilter Stream pour écrire le JSON et la méthode Write surchargée est supposée envelopper le nom de la fonction de rappel autour du JSON, sinon les erreurs JSON nécessitent un label. Cependant, si le JSON est vraiment long, la méthode Write de la classe Stream est appelée plusieurs fois, provoquant l'insertion incorrecte de la fonction de rappel à mi-chemin du JSON. Existe-t-il un moyen dans la classe Stream d'encapsuler la fonction de rappel autour du flux à la fin ou de spécifier qu'il écrit tout le JSON dans la méthode 1 Write au lieu de morceaux?
est ici où il appelle le JsonResponseFilter dans le JsonHttpModule:
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);
}
est ici la méthode Write dans la classe JsonResponseFilter Stream qui est appelée à plusieurs reprises:
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);
}
Merci pour toute aide! Justin
Merci, cet article m'a donné ce dont j'avais besoin! public override void Écrire (octet [] buffer, int offset, nombre entier) { chaîne json = System.Text.Encoding.UTF8.GetString (buffer, offset, count); _sb.Append (json); var endOfFile = new Regex ("]"); if (endOfFile.IsMatch (json)) { chaîne message = _context.Request.Params ["callback"] + "(" + _sb.ToString() + ");"; buffer = System.Text.Encoding.UTF8.GetBytes (message); _responseStream.Write (buffer, 0, buffer.Length); } } – Justin
Génial! Heureux d'avoir pu aider! – azamsharp