Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
JSON-utfyllnad (JSONP) är en mekanism som möjliggör stöd för skript mellan webbplatser i webbläsare. JSONP är utformat för möjligheten för webbläsare att läsa in skript från en annan webbplats än den som det aktuella inlästa dokumentet hämtades från. Mekanismen fungerar genom att lägga till extra data i JSON-nyttolasten med ett användardefinierat namn på återanropsfunktionen, som visas i exemplet nedan.
callback({"a" = \\"b\\"});
I föregående exempel omsluts JSON-nyttolasten , {"a" = \\"b\\"}i ett funktionsanrop, callback. Återanropsfunktionen måste redan ha definierats på den aktuella webbsidan. Innehållstypen för ett JSONP-svar är application/javascript.
JSONP aktiveras inte automatiskt. Om du vill aktivera det anger du javascriptCallbackEnabled attributet till true på någon av HTTP-standardslutpunkterna (WebHttpEndpoint eller WebScriptEndpoint), som du ser i följande exempel.
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" javascriptCallbackEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Namnet på återanropsfunktionen kan anges i en frågevariabel med namnet callback, i följande URL.
http://baseaddress/Service/RestService?callback=functionName
När den anropas skickar tjänsten ett svar som liknar följande.
functionName({"root":"Something"});
Du kan också ange motringningsfunktionens namn genom att tillämpa JavascriptCallbackBehaviorAttribute på tjänstklassen, som visas i följande exempel.
[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetData()
{
}
}
För den tjänst som visades tidigare ser en begäran ut så här.
http://baseaddress/Service/RestService?$callback=anotherFunction
När den anropas svarar tjänsten med följande.
anotherFunction ({"root":"Something"});
HTTP-statuskoder
JSONP-svar med andra HTTP-statuskoder än 200 innehåller en andra parameter med den numeriska representationen av HTTP-statuskoden, som du ser i följande exempel.
anotherFunction ({"root":"Something"}, 201);
Valideringar
Följande valideringar utförs när JSONP är aktiverat:
WCF-infrastrukturen utlöser ett undantag om
javascriptCallbackär aktiverat, en frågesträngsparameter för motringning finns i begäran och svarsformatet är inställt på JSON.Om begäran innehåller frågesträngsparametern för motringning men åtgärden inte är en HTTP GET ignoreras motringningsparametern.
Om motringningsnamnet är
nulleller en tom sträng formateras svaret inte som JSONP.