【问题标题】:How to change OData root service uri如何更改 OData 根服务 uri
【发布时间】:2014-10-14 13:34:15
【问题描述】:

我有一个 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();

当我想在这两个实体之间添加链接时,我遇到了“未授权”问题。代码是:

 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”。或任何可以解决此问题的方法。非常感谢。

【问题讨论】:

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


    【解决方案1】:

    该 Url 由 ODataMessageWriterSettings 中的 MetadataDocumentUri 控制。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多