Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
JSONP — это механизм, который обеспечивает поддержку межсайтового скриптинга в веб-браузерах. JSONP разработан вокруг возможности веб-браузеров загружать скрипты с сайта, отличного от того, из которого был получен текущий загруженный документ. Механизм работает за счёт добавления к JSON полезной нагрузке имени функции обратного вызова, определяемой пользователем, как показано в следующем примере.
callback({"a" = \\"b\\"});
В предыдущем примере полезные данные {"a" = \\"b\\"}
JSON упаковываются в вызов callback
функции. Функция обратного вызова должна быть уже определена на текущей веб-странице. Тип контента ответа JSONP — application/javascript
.
JSONP не включен автоматически. Чтобы включить его, задайте атрибут javascriptCallbackEnabled
значением true
на одной из стандартных конечных точек HTTP (WebHttpEndpoint или WebScriptEndpoint), как показано в следующем примере.
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" javascriptCallbackEnabled="true"/>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Имя функции обратного вызова можно указать в переменной запроса с именем обратного вызова, как показано в следующем URL-адресе.
http://baseaddress/Service/RestService?callback=functionName
При вызове служба отправляет ответ, как показано ниже.
functionName({"root":"Something"});
Можно также указать имя функции обратного вызова, применив JavascriptCallbackBehaviorAttribute его к классу службы, как показано в следующем примере.
[ServiceContract]
[JavascriptCallbackBehavior(ParameterName = "$callback")]
public class Service1
{
[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
public string GetData()
{
}
}
Для службы, показанной ранее, запрос выглядит следующим образом.
http://baseaddress/Service/RestService?$callback=anotherFunction
При вызове служба отвечает следующим образом.
anotherFunction ({"root":"Something"});
Коды состояния HTTP
Ответы JSONP с кодами состояния HTTP, отличные от 200, включают второй параметр с числовым представлением кода состояния HTTP, как показано в следующем примере.
anotherFunction ({"root":"Something"}, 201);
Проверки
При включении JSONP выполняются следующие проверки:
Инфраструктура WCF создает исключение, если включен
javascriptCallback
, в запросе указан параметр обратного вызова, а формат ответа установлен на JSON.Если запрос содержит параметр строки запроса обратного вызова, но операция не является HTTP GET, параметр обратного вызова игнорируется.
Если имя обратного вызова является
null
или пустой строкой, ответ не форматируется как JSONP.