Sharepoint c # получить весь сайт и дочерний сайт - PullRequest
7 голосов
/ 12 апреля 2011

Я пытаюсь получить все сайты и дочерние сайты в 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 ]

10 голосов
/ 12 апреля 2011

Вам, вероятно, понадобится позвонить 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 голос
/ 12 апреля 2011

Просто чтобы убедиться, работает ли этот код на сервере, на котором размещен портал Sharepoint?Какую версию Sharepoint вы используете?

Кроме того, имеет ли смысл использовать веб-сервисы, которые предоставляет Sharepoint?http://msdn.microsoft.com/en-us/library/aa979690(v=office.12).aspx

Если вы запускаете этот код на том же сервере, что и SP, убедитесь, что ваши учетные данные имеют доступ к SP.Если вы звоните по этому адресу с веб-сайта, убедитесь, что вы не работаете как «Аноним».

В целом, я думаю, что использование веб-сервисов - это самый простой способ заставить его работать.Но убедитесь, что у вас есть необходимые права на отправку и что у этого пользователя есть доступ (в конфигурациях SP) к этим данным.

Надеюсь, это поможет!

0 голосов
/ 07 июня 2013

Если вы используете SPSite.AllWebs Access Denied появляется сообщение! Это утверждение верно только в том случае, если текущий пользователь является администратором семейства сайтов

Таким образом, для всех пользователей эта функция получает все сайты и дочерние сайты.

    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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...