SharePoint PublishingWeb изменить в контексте повышенной безопасности не удается, почему? - PullRequest
2 голосов
/ 01 сентября 2010

У меня проблемы с обновлением атрибута публикации SharePoint в Интернете в RunWithElevatedPrivileges.происходит сбой с исключением «Проверка безопасности для этой страницы недопустима» в этой строке: «pubWeb.IncludeInCurrentNavigation = false;».Ниже приведен код, который я пытаюсь запустить.Обычно вы можете установить AllowUnsafeUpdates = true, но для публикации в Интернете этого специального свойства нет.

Мой вопрос заключается в том, как правильно обновить атрибуты publishingWeb в контексте с повышенными правами?

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite siteCollection = new SPSite(parentSiteUrl))
                {
                    //siteCollection.AllowUnsafeUpdates = true;
                    using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
                    {
                        //web.AllowUnsafeUpdates = true;
                        if (PublishingWeb.IsPublishingWeb(web))
                        {
                            // hide new sub-site from navigation elements.
                            PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
                            pubWeb.IncludeInCurrentNavigation = false;
                            pubWeb.IncludeInGlobalNavigation = false;
                            pubWeb.Update();
                        }
                    }
                }
            });

Ответы [ 2 ]

1 голос
/ 07 сентября 2010

Читал немного об использовании этого свойства

pubWeb.Navigation.ExcludeFromNavigation (true, web.ID);

вместо

pubWeb.IncludeInCurrentNavigation = false;

pubWeb.IncludeInGlobalNavigation = false;

Не уверен, имеет ли это отношение к тому, что вы пытаетесь выполнить.

SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite siteCollection = new SPSite(parentSiteUrl))
                    {
                        //siteCollection.AllowUnsafeUpdates = true;
                        using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
                        {
                            //web.AllowUnsafeUpdates = true;
                            if (PublishingWeb.IsPublishingWeb(web))
                            {
                                // hide new sub-site from navigation elements.
                                PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
                                pubWeb.Navigation.ExcludeFromNavigation(true, web.ID);
                                pubWeb.Update();
                            }
                        }
                    }
                });
1 голос
/ 06 сентября 2010

Если это изменение происходит при обратной передаче (POST), вы должны позвонить SPSecurity.ValidateFormDigest(), прежде чем вносить изменение. AllowUnsafeUpdates используется только для запросов HTTP GET.

Если бы это был запрос GET, я бы ожидал, что закомментированная строка сработает, но, поскольку она закомментирована, я предполагаю, что это не так. Я бы предложил вам использовать:

pubWeb.Web.AllowUnsafeUpdates = true

как PublishingWeb - это оболочка для экземпляра SPWeb, которая доступна через свойство Web. Странно, однако, я ожидал, что поставленный SPWeb был бы таким же экземпляром (и поэтому ваша закомментированная строка должна была работать.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...