0

我们正在使用ADO.NET 数据服务提供程序工具包来实现在 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 技巧(Pablo Castro 使用它来支持 JSON 格式)并添加以下代码来纠正:

        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);

这基本上改变了 Base 和 Request Uris 以包含子站点路径。

于 2013-02-20T13:47:22.173 回答