【问题标题】:Setting base address for ADO.NET Data Service Provider为 ADO.NET 数据服务提供者设置基地址
【发布时间】:2013-01-27 00:01:18
【问题描述】:

我们正在使用 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 属性?

【问题讨论】:

    标签: sharepoint ado.net wcf-data-services odata


    【解决方案1】:

    这可以通过使用相同的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 以包含子站点路径。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多