JayData oData запрос с пользовательскими заголовками
Мне нужно отправить пользовательские заголовки в мою службу wcf oData, но с помощью следующей функции заголовки не изменяются.
entities.onReady(function () {
entities.prepareRequest = function(r) {
r[0].headers['APIKey'] = 'ABC';
};
entities.DataServiceClient.toArray(function (cli) {
cli.forEach(function (c) {
console.log(c.Name)
});
});
});
заголовки не затрагиваются. какая-нибудь подсказка?
Спасибо!
2 ответа
РЕДАКТИРОВАТЬ
Если подумать, кажется, что в JayData все еще что-то не работает для запросов MERGE.
Это не CORS и не имеет к этому никакого отношения!
см. запрос JayData oData с пользовательскими заголовками - ROUND 2
ниже работает "взломать", но вышеупомянутый вопрос должен вывести эту проблему на новый уровень.
----------
Старый ответ
Неважно я нашел решение.
Это похоже на prepareRequest
сломан в JayData 1.3.2 (ODataProvider).
В качестве хака я добавил объект extraHeaders в providerConfiguration (oDataProvider.js):
this.providerConfiguration = $data.typeSystem.extend({
//Leave content unchanged and add the following:
extraHeaders: {}
}, cfg);
затем в строке 865 измените requestData следующим образом:
var requestData = [
{
requestUri: this.providerConfiguration.oDataServiceHost + sql.queryText,
method: sql.method,
data: sql.postData,
headers: _.extend({
MaxDataServiceVersion: this.providerConfiguration.maxDataServiceVersion
},this.providerConfiguration.extraHeaders)
},
ПРИМЕЧАНИЕ: я использую lodash для удобства, любое расширение js должно помочь.
тогда вы просто создаете своего клиента следующим образом:
var entities = new Entities.MyEntities({
name: 'oData',
oDataServiceHost: 'http://myhost.com/DataService.svc',
maxDataServiceVersion: "2.0",
//enableJSONP: true,
extraHeaders: {apikey:'f05d1c1e-b1b9-5a2d-2f44-da811bd50bd5', Accept:'application/json;odata=verbose'}
}
);
Кажется, отмеченный ответ неверен. Я страдал от подобной проблемы, но заставил ее работать без изменения datajs.
Моя проблема заключалась в том, что я выполнял междоменный (CORS) запрос, но явно не разрешал заголовки. После того, как я добавил правильный заголовок CORS в веб-сервис, он заработал.