0

ADO.NET Data Service Provider Toolkitを使用して、SharePoint 2010内で実行されるカスタムODataサービスエンドポイントを実装しています(.NET 3.5を使用)。

サイトコレクションのルートでサービスにアクセスすると、返されるベースアドレスは正しいです。

 http://localhost/_vti_bin/service.svc/ returns a base address (in the returned atom document) as <feed xml:base="http://localhost/_vti_bin/service.svc />

ただし、サブサイトでサービスエンドポイントにアクセスすると、追加のパスセグメントは無視されます。

http://localhost/subsite/_vti_bin/service.svc/ returns a base address (in the returned atom document) as <feed xml:base="http://localhost/_vti_bin/service.svc />

残念ながら、この誤った動作はPowerPivot(後続のクエリにアクセスするために返されたベースアドレスを使用しているように見えます)を混乱させます。

プロバイダーコード内から明示的にxml:base属性を作成する方法はありますか?

4

1 に答える 1

0

これは、同じIDispatchMessageInspectorトリック(JSONフォーマットをサポートするためにPablo Castroで使用されるもの)を使用し、次のコードを追加することで修正できます。

        HttpRequestMessageProperty httpmsg = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
        UriTemplateMatch match = (UriTemplateMatch)request.Properties["UriTemplateMatchResults"];

        match.RequestUri = new Uri(SPContext.Current.Web.Url + match.RequestUri.PathAndQuery, UriKind.Absolute);
        match.BaseUri = new Uri(SPContext.Current.Web.Url + match.BaseUri.AbsolutePath, UriKind.Absolute);

これは基本的にベースとリクエストURIを変更してサブサイトパスを含めます。

于 2013-02-20T13:47:22.173 に答える