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 в веб-сервис, он заработал.

Другие вопросы по тегам