denyandaddcustomizedpages - изменить свойство с помощью csom для сайта современной команды - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время мы используем современный сайт группы и пытаемся добавить объект на современный сайт группы в SharePoint онлайн

Однако мы заметили, что получаем ошибку «Отказано в доступе»

Мы попытались установить для свойства сайта denyandaddcustomizedpages значение false из powershell, и оно работает нормально

Однако мы не можем получить код, который может помочь нам добиться того же, используя объектную модель csom на стороне клиента, SharePoint, онлайн c #

В некоторых статьях упоминается попытка использовать самородок pnp, но не удалось найти код для того же

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете сделать это, используя приведенный ниже пример кода.

Обратите внимание: выполнение этого кода требует прав администратора SharePoint, внесите необходимые изменения в соответствии с вашими требованиями:

var tenantAdminSiteUrl = "https://tenant-admin.sharepoint.com";
var siteCollectionUrl = "https://tenant.sharepoint.com/sites/Test";

var userName = "admin@tenant.onmicrosoft.com";
var password = "password";

using (ClientContext clientContext = new ClientContext(tenantAdminSiteUrl))
{
    SecureString securePassword = new SecureString();
    foreach (char c in password.ToCharArray())
    {
        securePassword.AppendChar(c);
    }

    clientContext.AuthenticationMode = ClientAuthenticationMode.Default;
    clientContext.Credentials = new SharePointOnlineCredentials(userName, securePassword);

    var tenant = new Tenant(clientContext);
    var siteProperties = tenant.GetSitePropertiesByUrl(siteCollectionUrl, true);
    tenant.Context.Load(siteProperties);
    tenant.Context.ExecuteQuery();

    siteProperties.DenyAddAndCustomizePages = DenyAddAndCustomizePagesStatus.Disabled;
    var operation = siteProperties.Update();
    tenant.Context.Load(operation, op => op.IsComplete, op => op.PollingInterval);
    tenant.Context.ExecuteQuery();

    // this is necessary, because the setting is not immediately reflected after ExecuteQuery
    while (!operation.IsComplete)
    {
        Thread.Sleep(operation.PollingInterval);
        operation.RefreshLoad();
        if (!operation.IsComplete)
        {
            try
            {
                tenant.Context.ExecuteQuery();
            }
            catch (WebException webEx)
            {
                // catch the error, something went wrong
            }
        }
    }
}
...