我有一个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"这里。或任何可以解决此问题的方法。非常感谢。
答案 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/");
}