从SharePoint上托管的WCF中的SPContext获取SPWeb
-
10-12-2019 - |
题
我已经在SharePoint中创建和部署了一个WCF服务,并且我正在使用JQuery发送请求。除了子站点之外,每件事都工作正常。
假设我有这两个服务Url:
- http://localhost:1111/_vti_bin...../MethodName
- http://localhost:1111/subsite/_vti_bin...../MethodName
当我使用这两个Url时 SPContext.Current.Site
是相同的,是正确的。
但是 SPContext.Current.Web
是相同的,这是不正确的。使用第二个URL SPWeb
对象必须是子web而不是根web。
我怎样才能得到子站点作为一个 SPWeb
对象?我是否需要始终将web URL作为参数传递给WCF方法?
解决方案
经过搜索,我得出结论: SPContext.Current.Web
将始终返回 RootWeb
所以我需要特定子web的URL。
为了避免将SPWeb URL传递给我需要SPWeb对象的每个WCF方法,我可以执行以下操作:
我正在运行我的WCF服务ASP.NET comatibility模式,所以我可以使用 HttpContext
对象,我可以使用 HttpContext.Current.Request.RawUrl
.此属性返回URL字符串中域名后面的所有内容。然后我可以截断此字符串以获取子web相对URL并将其传递给 OpenWeb()
方法。
例子::
在客户端,JQuery AJAX调用的URL参数是:
http://localhost:1111/subsite/_vti_bin...../MethodName
在服务器端,如果我使用 HttpContext.Current.Request.RawUrl
我得到:
/subsite/_vti_bin...../MethodName
然后在我截断这个字符串后,我通过 /subsite
致 OpenWeb()
方法。
任何其他想法都非常感谢。
其他提示
我也有同样的情况。但我把网址从这里:
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
所以我能够创建一个SPSite对象:
using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{
//your code
}