1

我需要将自定义标头发送到我的 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)
        });
    });
});

标头不受影响。任何线索?

谢谢!

4

2 回答 2

0

标记的答案似乎不正确。我遇到了类似的问题,但是在不更改 datajs 的情况下让它工作。

我的问题是我正在执行跨域(CORS)请求,但没有明确允许标头。在我将正确的 CORS 标头添加到 Web 服务后,它就起作用了。

于 2014-01-10T08:29:22.800 回答
0

编辑

再想一想,对于 MERGE 请求,JayData 中似乎仍有一些问题。

这不是 CORS,与它无关!

请参阅带有自定义标头的 JayData oData 请求 - 第 2 轮

波纹管“hack”有效,但上述问题应该将这个问题提升到一个新的水平。

----------

旧答案

没关系,我找到了解决方案。

prepareRequestJayData 1.3.2 (ODataProvider)似乎坏了。

作为 hack,我在 providerConfiguration (oDataProvider.js) 中添加了一个 extraHeaders 对象:

  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'}
        }
    );
于 2013-10-09T12:31:54.743 回答