Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
JSON Padding (JSONP) ist ein Mechanismus, der die Unterstützung der website-übergreifenden Skriptausführung in Webbrowsern ermöglicht. JSONP basiert auf der Fähigkeit von Webbrowsern, Skripts von einer anderen Website als der zu laden, von der das aktuell geladene Dokument stammt. Der Mechanismus funktioniert, indem die JSON-Nutzlast mit einem benutzerdefinierten Rückruffunktionsnamen aufgefüllt wird, wie im folgenden Beispiel gezeigt.
callback({"a" = \\"b\\"});
Im vorherigen Beispiel wird die JSON-Nutzlast {"a" = \\"b\\"}
in einen Funktionsaufruf eingeschlossen. callback
Die Rückruffunktion muss bereits auf der aktuellen Webseite definiert sein. Der Inhaltstyp einer JSONP-Antwort lautet application/javascript
.
JSONP ist nicht automatisch aktiviert. Um es zu aktivieren, legen Sie das javascriptCallbackEnabled
Attribut true
auf einen der HTTP-Standardendpunkte (WebHttpEndpoint oder WebScriptEndpoint), wie im folgenden Beispiel gezeigt.
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" javascriptCallbackEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Der Name der Rückruffunktion kann in einer Abfragevariable namens callback angegeben werden, wie in der folgenden URL dargestellt.
http://baseaddress/Service/RestService?callback=functionName
Wenn der Dienst aufgerufen wird, sendet der Dienst eine Antwort wie die folgende.
functionName({"root":"Something"});
Sie können auch den Namen der Rückruffunktion angeben, indem Sie die JavascriptCallbackBehaviorAttribute Dienstklasse anwenden, wie im folgenden Beispiel gezeigt.
[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetData()
{
}
}
Für den zuvor gezeigten Dienst sieht eine Anforderung wie folgt aus.
http://baseaddress/Service/RestService?$callback=anotherFunction
Wenn der Dienst aufgerufen wird, antwortet der Dienst wie folgt.
anotherFunction ({"root":"Something"});
HTTP-Statuscodes
JSONP-Antworten mit anderen HTTP-Statuscodes als 200 enthalten einen zweiten Parameter mit der numerischen Darstellung des HTTP-Statuscodes, wie im folgenden Beispiel gezeigt.
anotherFunction ({"root":"Something"}, 201);
Bestätigungen
Die folgenden Überprüfungen werden ausgeführt, wenn JSONP aktiviert ist:
Die WCF-Infrastruktur löst eine Ausnahme aus, wenn
javascriptCallback
aktiviert ist, ein Rückruf-Query-String-Parameter in der Anforderung vorhanden ist und das Antwortformat auf JSON festgelegt ist.Wenn die Anforderung den Parameter für die Rückrufabfragezeichenfolge enthält, der Vorgang jedoch kein HTTP GET ist, wird der Rückrufparameter ignoriert.
Wenn der Rückrufname oder die leere Zeichenfolge ist
null
, ist die Antwort nicht als JSONP formatiert.