我正在尝试检索sharepoint中的所有网站和子网站,但我拒绝访问。
我读过要使用GetSubwebsForCurrentUser()属性,但是我得到了相同的消息。
我的代码是下一个
foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
{
foreach (SPSite siteCollection in webApp.Sites)
{
foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
{
dropDownSite.Items.Add(web.Url);
}
}
}
我需要帮助!谢谢!
答案 0 :(得分:10)
您可能需要致电SPSecurity.RunWithElevatedPrivileges(delegate())
如果您愿意,可以执行内联委托,例如:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
{
foreach (SPSite siteCollection in webApp.Sites)
{
foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
{
dropDownSite.Items.Add(web.Url);
}
}
}
});
答案 1 :(得分:1)
只是为了确保这个代码是在托管Sharepoint门户的服务器上运行的吗?你在运行什么版本的Sharepoint?
此外,使用Sharepoint公开的Web服务是否有意义? http://msdn.microsoft.com/en-us/library/aa979690(v=office.12).aspx
如果您在与SP相同的服务器上运行此代码,请确保您的凭据可以访问SP。如果您从网站上调用此功能,请确保您没有以“匿名”身份运行。
总而言之,我认为利用网络服务是让它发挥作用的最简单方法。但请确保您具有正确的权限,并且该用户可以访问(在SP配置中)该数据。
希望有所帮助!
答案 2 :(得分:0)
如果您使用SPSite.AllWebs拒绝访问消息! 只要当前用户是网站集管理员
,此语句才是正确的因此,对于所有用户,此功能可以获取所有站点和子站点。
public static IEnumerable<SPWeb> DescendantSites(this SPWeb input)
{
foreach (SPWeb web in input.GetSubwebsForCurrentUser())
{
yield return web;
foreach (var subnode in web.DescendantSites())
yield return subnode;
}
}