Ich möchte einige JSONs domänenübergreifend zurückgeben, und ich verstehe, dass dies eher über JSONP als über reines JSON erfolgt.
Ich verwende ASP.net MVC, also habe ich darüber nachgedacht, nur den JsonResult
Typ und dann den Controller so zu erweitern, dass auch eine Jsonp-Methode implementiert wird.
Ist dies der beste Weg, oder gibt es eine integrierte Funktion ActionResult
, die möglicherweise besser ist?
Lösung : Ich habe das gemacht. Nur als Referenz habe ich ein neues Ergebnis hinzugefügt:
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
}
}
}
und auch ein paar Methoden zu einer Superklasse aller meiner Controller:
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
};
}
Klappt wunderbar.