Http headers 具有自定义标题的JayData oData请求-第2轮
几个月前,我正在从事一些ODataWCF项目,在解析令牌身份验证(apiKey)的自定义头时遇到了一些问题 当时,作为一个不折不扣的人(我还是!),我发布了这样一个问题: 今天,我正在使用Jaydata Odata服务器和客户端库进行一个新项目,这是: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请求之前,我一直工作得很
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上,你可以指望沃德或杰伊·塔班德以非常高的专业水平回答
最后,我意识到这可能更像是一个维基,而不是一个问题