Http headers 具有自定义标题的JayData oData请求-第2轮

Http headers 具有自定义标题的JayData oData请求-第2轮,http-headers,odata,jaydata,Http Headers,Odata,Jaydata,几个月前,我正在从事一些ODataWCF项目,在解析令牌身份验证(apiKey)的自定义头时遇到了一些问题 当时,作为一个不折不扣的人(我还是!),我发布了这样一个问题: 今天,我正在使用Jaydata Odata服务器和客户端库进行一个新项目,这是: application.context.prepareRequest = function (r) { r[0].headers['apikey'] = '123456'; }; 在我不得不做一个MERGE请求之前,我一直工作得很

几个月前,我正在从事一些ODataWCF项目,在解析令牌身份验证(apiKey)的自定义头时遇到了一些问题

当时,作为一个不折不扣的人(我还是!),我发布了这样一个问题:

今天,我正在使用Jaydata Odata服务器和客户端库进行一个新项目,这是:

 application.context.prepareRequest = function (r) {
     r[0].headers['apikey'] = '123456';
 };
在我不得不做一个
MERGE
请求之前,我一直工作得很好。我发现合并请求以某种方式覆盖了我的头,所以我进一步调查

首先,在
\u saveRest
方法中的oDataProvider.js(~第617行)中,似乎没有继承头:

request = {
   requestUri: this.providerConfiguration.oDataServiceHost + '/',
   headers: {
      MaxDataServiceVersion: this.providerConfiguration.maxDataServiceVersion
   }
};
但几行之后我们得到:

this.context.prepareRequest.call(this, requestData);
哪个“应该”调用我自己的
prepareRequest
,但不。。。相反,它仍然指出:

//Line 11302 jaydata.js
prepareRequest: function () { }, 
这当然是。。。没有什么!有趣的是,当您执行一个简单的
GET
时,假定在同一
上下文
实例上的相同代码可以工作,并指向我的
prepareRequest
覆盖

我可以非常自信地断言GET/MERGE之间的上下文不是同一个实例。但是,我看不到有任何地方重新分配了
上下文
实例

有人有线索吗

注:这不是一个
CORS
问题。我的选择是在oDataProvider works中通过精细和手动输入标题

更多 我遵循不同上下文实例的线索,发现了一些有趣的东西。调用
EntitySet.save()
最终调用
EntityContext
构造函数。请参阅跟踪:

$data.Class.define.constructor (jaydata.js:10015)
EntityContext (VM110762:7)
Service (VM110840:8)
storeToken.factory (jaydata.js:14166)
$data.Class.define._getContextPromise (jaydata.js:13725)
$data.Class.define._getStoreContext (jaydata.js:13700)
$data.Class.define._getStoreEntitySet (jaydata.js:13756)
$data.Class.define.EntityInstanceSave (jaydata.js:13837)
$data.Entity.$data.Class.define.save (jaydata.js:9774)
(anonymous function) (app.js:162) // My save()
这解释了为什么我得到两个不同的实例

乱劈 在类定义中直接替换
prepareRequest
函数是可行的,但它很难看

现在,我可以应付这个问题:

$data.EntityContext.prototype.prepareRequest = function (r) {
   r[0].headers['apikey'] = '12345';
}; 
只要您只需要与一个端点通话,这就可以正常工作

最后一句话是根据我的经验 虽然我很喜欢JayData,但很明显,他们创造了一个怪物,并且它从他们手中消失了(糟糕的论坛,没有社区,半文档化,…)

我选择JD是因为我很懒,想继续使用我以前的WCF数据服务。切换到WebAPI似乎是错误的,或者对我来说工作量太大

作为一名.net开发人员,我喜欢实体的强类型和使用JD工具生成的具体模型的能力。然而,最后,我又增添了困惑。每次我的服务器端模型更改时,我都必须获取新的元数据并构建一个新的entityModel

最后,我切换到WebAPI,并将数据服务层迁移到Breeze。说真的!和它一起工作真是轻而易举

文档绝对精彩,在S.O上,你可以指望沃德或杰伊·塔班德以非常高的专业水平回答

最后,我意识到这可能更像是一个维基,而不是一个问题