/ / ODataルートサービスの変更方法uri - .net、asp.net-web-api、メタデータ、odata

ODataルートサービスを変更する方法uri - .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();

これら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/");
}