Sharepoint c#检索所有站点和子站点

时间:2011-04-12 15:38:01

标签: c# sharepoint

我正在尝试检索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);
                    }


                }
            }

我需要帮助!谢谢!

3 个答案:

答案 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;
        }
    }