C# 如何循环浏览SharePoint网站的所有网站和子网站

C# 如何循环浏览SharePoint网站的所有网站和子网站,c#,asp.net,sharepoint,sharepoint-2010,sharepoint-2013,C#,Asp.net,Sharepoint,Sharepoint 2010,Sharepoint 2013,我试图在一个网站下的所有网站和这些网站的子网站之间进行循环 我的父母网站 (这是一个子站点,不是根站点) 子网 (这是一个子网,可能有子网,也可能没有子网) 我唯一尝试的就是进入网站集并在所有网站上循环,这是一个更长的过程,因为我知道唯一需要检查的子网站。我的网站集有多个子网站。我不想循环浏览所有的SUB站点 这段代码可以工作,但它需要花费大量的时间,并且它会循环遍历所有不需要检查的子网站 using(SPSite site = new SPSite(“http://myserver/

我试图在一个网站下的所有网站和这些网站的子网站之间进行循环

我的父母网站

(这是一个子站点,不是根站点)

子网 (这是一个子网,可能有子网,也可能没有子网)

我唯一尝试的就是进入网站集并在所有网站上循环,这是一个更长的过程,因为我知道唯一需要检查的子网站。我的网站集有多个子网站。我不想循环浏览所有的SUB站点

这段代码可以工作,但它需要花费大量的时间,并且它会循环遍历所有不需要检查的子网站

     using(SPSite site = new SPSite(“http://myserver/mysitecol”) 
           { 
               foreach(SPWeb web in site.AllWebs) 
               {
               }
           } 

您可以使用
SPWeb
对象的
.Webs
属性访问其直接子网站

using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    using(SPWeb parentweb = site.OpenWeb("subweb/subweb") 
    {
        foreach(SPWeb web in parentweb.Webs)
        {

        }
    }
} 
要访问网站下的所有子网站(包括间接子网站),您可以在每个直接子网站上递归访问
.Webs
属性,但从
SPSite
网站集合对象的
.AllWebs
属性开始更简单

.AllWebs
返回的SPWebCollection的
.webinfo
属性提供了一个轻量级
SPWebInfo
对象的
列表。您可以使用此轻量级集合获取所关心的站点的筛选列表,而无需实例化和处置集合中的任何其他SPWeb

string webUrl = "/mysitecol/subweb/subweb";
using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    List<SPWebInfo> websInfo = site.AllWebs.WebsInfo.FindAll(
        delegate(WebsInfo webInfo)
        {
            // filter to get us only the webs that start with our desired URL
            return webInfo.ServerRelativeUrl.StartsWith(webUrl);
        }
    );
    foreach(SPWebInfo webInfo in websInfo)
    {
         using(SPWeb web = site.OpenWeb(webInfo.Id))
         {

         }
    }
}
string webUrl=“/mysitecol/subweb/subweb”;
使用(SPSite站点=新SPSite(“http://myserver/mysitecol") 
{ 
List webinfo=site.AllWebs.webinfo.FindAll(
代表(网络信息网络信息)
{
//筛选以仅获取以所需URL开头的网站
返回webInfo.ServerRelativeUrl.StartsWith(webUrl);
}
);
foreach(webInfo中的SPWebInfo webInfo)
{
使用(SPWeb=site.OpenWeb(webInfo.Id))
{
}
}
}

您可以使用
SPWeb
对象的
.Webs
属性访问其直接子网站

using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    using(SPWeb parentweb = site.OpenWeb("subweb/subweb") 
    {
        foreach(SPWeb web in parentweb.Webs)
        {

        }
    }
} 
要访问网站下的所有子网站(包括间接子网站),您可以在每个直接子网站上递归访问
.Webs
属性,但从
SPSite
网站集合对象的
.AllWebs
属性开始更简单

.AllWebs
返回的SPWebCollection的
.webinfo
属性为您提供了一个轻量级
SPWebInfo
对象的
列表。您可以使用此轻量级集合获取所关心的站点的筛选列表,而无需实例化和处置集合中的任何其他SPWeb

string webUrl = "/mysitecol/subweb/subweb";
using(SPSite site = new SPSite("http://myserver/mysitecol") 
{ 
    List<SPWebInfo> websInfo = site.AllWebs.WebsInfo.FindAll(
        delegate(WebsInfo webInfo)
        {
            // filter to get us only the webs that start with our desired URL
            return webInfo.ServerRelativeUrl.StartsWith(webUrl);
        }
    );
    foreach(SPWebInfo webInfo in websInfo)
    {
         using(SPWeb web = site.OpenWeb(webInfo.Id))
         {

         }
    }
}
string webUrl=“/mysitecol/subweb/subweb”;
使用(SPSite站点=新SPSite(“http://myserver/mysitecol") 
{ 
List webinfo=site.AllWebs.webinfo.FindAll(
代表(网络信息网络信息)
{
//筛选以仅获取以所需URL开头的网站
返回webInfo.ServerRelativeUrl.StartsWith(webUrl);
}
);
foreach(webInfo中的SPWebInfo webInfo)
{
使用(SPWeb=site.OpenWeb(webInfo.Id))
{
}
}
}

它只会给直接站点而不是直接子站点的子站点。好吧,当你循环时,你可以递归地访问每个子站点的
.webs
属性,但是我怀疑在
SPSite
对象上使用
AllWebs.WebsInfo
属性会更快。我会更新我的答案。会的只给直接网站而不是直接子网站的子网站明白了。好吧,你可以在循环时递归访问每个子网站的
.webs
属性,但我怀疑在
SPSite
对象上使用
AllWebs.WebsInfo
属性会更快。我会更新我的答案。