我们正在使用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属性?
答案 0 :(得分:0)
这可以通过使用相同的IDispatchMessageInspector trick(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以包含子站点路径。