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();
これら2つのエンティティ間にリンクを追加したいときに、 "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そのURLはODataMessageWriterSettingsのMetadataDocumentUriによって制御されます。
ODataLibを直接使用する場合は、試すことができます。
settings.SetMetadataDocumentUri(new Uri("http://apigee.com/odata/v1/$metadata"));
WCF Data Serviceを使用している場合は、DataServiceでOnStartProcessingRequestメソッドのオーバーライドを試すことができます。
protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
args.ServiceUri = new Uri("http://apigee.com/odata/v1/");
}