-
28-09-2020 - |
题
我有一个具有不同级别的站点的根网站(深度未知)。如何找到所有SPWeb对象迭代到最深层面。
以下代码会给我想要的结果
SPWebApplication mySPWebApp = SPWebApplication.Lookup(new Uri("http://test-site"));
{
foreach (SPSite siteCollection in mySPWebApp.Sites)
{
foreach (SPWeb oweb in siteCollection.AllWebs)
{
//My Code
}
}
}
. 解决方案
是,使用 spwebapplication.sites 您可以在Web应用程序中获取所有网站集,并使用spsite.allwebs 您可以在网站集中获取所有网站,无论级别。
最佳实践是在从AllWeb属性返回的集合中检索的单个网站上进行处理。
foreach (SPWeb oweb in siteCollection.AllWebs)
{
try
{
//Your code
}
finally
{
oweb.Dispose();
}
}
.
您也应该处理网站集。
其他提示
要在@ naim的答案上,您应该处理站点集合和网站和网站,并在处理或使用陈述时使用尝试/捕获。
网站集处理示例
void SPSiteCollectionForEachNoLeak()
{
using (SPSite siteCollectionOuter = new SPSite("http://moss"))
{
SPWebApplication webApp = siteCollectionOuter.WebApplication;
SPSiteCollection siteCollections = webApp.Sites;
foreach (SPSite siteCollectionInner in siteCollections)
{
try
{
// ...
}
finally
{
if(siteCollectionInner != null)
siteCollectionInner.Dispose();
}
}
} // SPSite object siteCollectionOuter.Dispose() automatically called.
}
.
Web处置示例
void SPWebCollectionAddNoLeak(string strWebUrl)
{
using (SPSite siteCollection = new SPSite("http://moss"))
{
using (SPWeb outerWeb = siteCollection.OpenWeb())
{
SPWebCollection webCollection = siteCollection.AllWebs; // No AllWebs leak just getting reference.
using (SPWeb innerWeb = webCollection.Add(strWebUrl))
{
//...
}
} // SPWeb object outerWeb.Dispose() automatically called.
} // SPSite object siteCollection.Dispose() automatically called.
}
.