我需要将自定义标头发送到我的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)
});
});
});
标头不受影响。任何线索?
谢谢!
答案 0 :(得分:0)
第二个想法,似乎JayData中的MERGE请求仍然存在问题。
这不是CORS,与它无关!
请参阅JayData oData request with custom headers - ROUND 2
吼叫" hack"有效,但上述问题应该将这个问题提升到一个新的水平。
没关系我找到了解决方案。
JayData 1.3.2(ODataProvider)似乎打破了prepareRequest
。
作为一个黑客,我在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)
},
注意:Iam使用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'}
}
);
答案 1 :(得分:0)
似乎标记的答案不正确。我遇到了类似的问题,但是在不改变datajs的情况下让它工作。
我的问题是我正在做跨域(CORS)请求,但没有明确允许标头。在我将正确的CORS标头添加到Web服务之后,它就可以了。