如何更改OData根服务uri

时间:2014-09-30 00:11:57

标签: .net asp.net-web-api metadata odata

我有一个OData服务。基础uri是:http://example.com/odata/v1。 我通过另一个网站公开它:http://apigee.com/odata/v1。该站点将所有请求重定向到example.com,并具有客户端验证机制。

我正在使用OData .NET客户端库来调用该服务。每个简单的请求都可以正常工作:

GET http://apigee.com/odata/v1/Activities(1)
GET http://apigee.com/odata/v1/AppPackages(1)

相应的.NET代码是这样的:

var container = new Container("http://apigee.com/odata/v1");
var activity = container.Activities.Where(p => p.id == "1").SingleOrDefault();
var apppackage = container.AppPackages.Where(p => p.id == "1").SingleOrDefault();

当我想在这两个实体之间添加链接时,我会遇到" Unauthorization"问题。代码是:

 container.AddLink(act, "AppPackages", package);
 container.SaveChanges();

生成的http请求是:

POST http://example.com/odata/v1/Activities(1)/$links/AppPackages 

AddLink直接调用" http://example.com/odata/v1"而不是" http://apigee.com/odata/v1"。它没有通过apigee.com上的客户端验证,所以example.com拒绝它。我想原因是来自" odata.metadata"。当我做的时候

GET http://mysite.io/odata/v1/Activities(1)

返回的信息是:

{
   "odata.metadata":"http://example.com/odata/v1/$metadata#Activities/@Element",
   ...
}

我想知道是否有办法让我回归" http://apigee.com/odata/v1"这里。或任何可以解决此问题的方法。非常感谢。

1 个答案:

答案 0 :(得分:0)

该Url由来自ODataMessageWriterSettings的MetadataDocumentUri控制。

如果直接使用ODataLib,您可以尝试:

settings.SetMetadataDocumentUri(new Uri("http://apigee.com/odata/v1/$metadata"));

如果使用WCF数据服务,您可以尝试在DataService上覆盖OnStartProcessingRequest方法:

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    args.ServiceUri = new Uri("http://apigee.com/odata/v1/");
}