【问题标题】:Sharepoint c# retrieve all site and subsiteSharepoint c# 检索所有站点和子站点
【发布时间】:2018-07-27 00:11:00
【问题描述】:

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


                }
            }

我需要帮助!谢谢!

【问题讨论】:

  • 这段代码是从哪里运行的?网页部分?定时器工作?还有什么?
  • 请注意,现在有一个SharePoint stack exchange site。它处于测试阶段,但你应该在那里发帖(或者版主可以把这个问题移到那里)。这将有助于网站获得更多的吸引力:)
  • 您在寻找基于用户上下文的网站列表吗?如果是这样,您这样做只是为了填充下拉列表吗?如果是这样,我建议使用 portalsitemapprovider。此外,您的代码将使这些网络中的每一个都处于未处理状态,从而导致每次运行时都会发生巨大的内存泄漏

标签: c# sharepoint


【解决方案1】:

您可能需要致电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);
            }
        }
    }
});

【讨论】:

    【解决方案2】:

    只是为了确定,此代码是否在托管 Sharepoint 门户的服务器上运行?您运行的是哪个版本的 Sharepoint?

    另外,使用 Sharepoint 公开的 Web 服务是否有意义? http://msdn.microsoft.com/en-us/library/aa979690(v=office.12).aspx

    如果您在与 SP 相同的服务器上运行此代码,请确保您的凭据可以访问 SP。如果您是从网站调用它,还要确保您没有以“匿名”身份运行。

    总的来说,我认为利用 Web 服务是使其正常工作的最简单方法。但请确保您拥有被发送的正确权限,并且该用户有权访问(在 SP 配置中)该数据。

    希望有帮助!

    【讨论】:

      【解决方案3】:

      如果您使用 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;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多