Je suis à la recherche d'un éventuel retour JSON dans les domaines et je comprends que la façon de le faire est par le biais de JSONP plutôt que la pure JSON. Je suis à l'aide de ASP.net MVC donc je pensais à une simple extension du JSONResult type et puis extendig Contrôleur afin qu'il soit également mis en place un Jsonp méthode. Est-ce la meilleure façon d'aller à ce sujet ou est-il intégré dans la ActionResult qui pourrait être mieux?
Edit: je suis allé de l'avant et fait. Juste pour la référence souci, j'ai ajouté un nouveau résultat:
public class JsonpResult : System.Web.Mvc.JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!String.IsNullOrEmpty(ContentType))
{
response.ContentType = ContentType;
}
else
{
response.ContentType = "application/javascript";
}
if (ContentEncoding != null)
{
response.ContentEncoding = ContentEncoding;
}
if (Data != null)
{
// The JavaScriptSerializer type was marked as obsolete prior to .NET Framework 3.5 SP1
#pragma warning disable 0618
HttpRequestBase request = context.HttpContext.Request;
JavaScriptSerializer serializer = new JavaScriptSerializer();
response.Write(request.Params["jsoncallback"] + "(" + serializer.Serialize(Data) + ")");
#pragma warning restore 0618
}
}
}
et aussi un couple de méthodes pour une super-classe de toutes mes contrôleurs:
protected internal JsonpResult Jsonp(object data)
{
return Jsonp(data, null /* contentType */);
}
protected internal JsonpResult Jsonp(object data, string contentType)
{
return Jsonp(data, contentType, null);
}
protected internal virtual JsonpResult Jsonp(object data, string contentType, Encoding contentEncoding)
{
return new JsonpResult
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding
};
}
Fonctionne comme un charme.