【发布时间】:2017-12-13 18:26:06
【问题描述】:
我有一个返回人员的简单 Odata V4 服务。
此服务不可直接访问:
- 可通过 Apigee 访问,即使用 http://myApigeeServer/Person
- 然后Apigee 指向负载平衡器,即http://myLoadBalancer/Person
- 最后在我的负载均衡器虚拟IP后面实际上有两台服务器,即http://myFirstServer/Person和http://mySecondServer/Person
我的问题是我们可以在服务响应“@odata.context”元数据中看到真正的最终服务器 URL,因此调用 http://myApigeeServer/Person('foo') 会导致两个响应:
{
"@odata.context": "http://myFirstServer/$metadata#Person/$entity",
"FirstName": "John",
"LastName": "Doe",
"Phone@odata.type": "#Collection(String)",
"Phone": [
"+123456789"
],
}
或者
{
"@odata.context": "http://mySecondServer/$metadata#Person/$entity",
"FirstName": "John",
"LastName": "Doe",
"Phone@odata.type": "#Collection(String)",
"Phone": [
"+123456789"
],
}
我真的必须隐藏最终的服务器名称。所以我的问题是:是否可以完全删除“@odata.context”元数据或对其进行自定义?在我的情况下,自定义意味着使用 Apigee URL 强制“@odata.context”元数据值。
[---编辑----]
基于Dylan Nicholson 提出的the link(谢谢!),确实在 ODataMediaTypeFormatter 上存在一个挂钩,可以更改服务 URI 基地址。
但在我的测试中,它不起作用/我没有设法使它适用于 @odata.context URI。因此,从链接到链接和测试到测试,我到达了here 和lencharest 的解决方案效果很好:使用自定义 URL 帮助程序来重写每个链接基地址。以后看会不会太虐了……
【问题讨论】: