C#Odata自定义本机元数据

时间:2017-12-04 07:41:50

标签: c# odata metadata

我有一个简单的Odata V4服务,可以归还人员。

无法直接访问此服务:

我的问题是我们可以在服务响应“@ 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”元数据值。

[--- EDIT ----]

基于the link提出的Dylan Nicholson(谢谢!),确实它在ODataMediaTypeFormatter上存在一个钩子,可以更改服务URI基址。

但在我的测试中,它没有用/我没有设法让它适用于@ odata.context URI。因此,从链接和测试到测试的链接,我到达here并且lencharest的解决方案非常有效:使用自定义URL帮助程序重写每个链接基址。我将来会看到它是否过于野蛮......

1 个答案:

答案 0 :(得分:1)

@Max

要取消@ odata.context,您可以使用“application / json; odata.metadata = none”