2010-08-31 2 views
2

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

Вопрос в том, как правильно обновлять атрибуты публикации Web в повышенном контексте?

  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(); 
         } 
        } 
       } 
      }); 
+0

где работает ваш код? приемник функций? веб-часть? –

+0

Он работает в пользовательском элементе управления, который запекается в макете страницы. – James

ответ

1

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

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

pubWeb.Web.AllowUnsafeUpdates = true 

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

+0

Это действие происходит при обратной передаче. Учитывая, что мне нужно объединить SPSecurity.ValidateFormDigest() с pubWeb.Web.AllowUnsafeUpdates = true для этого? – James

+0

№ ValidateFormDigest для POST, AllowUnsafeUpdate для GET. Точка в форме дайджеста заключается в том, что он держит страницу без вмешательства и «безопасен». Запрос на получение считается небезопасным, поскольку его легко манипулировать с помощью запроса, который может использоваться для вызовов чувствительных методов. Если вы обнаружите, что делаете те же самые изменения в POST и GET, повторите свой проект. Вы должны стремиться только к POST. – x0n

+0

Учитывая, что эти действия относятся только к обратной передаче, следует ли «SPSecurity.ValidateFormDigest()» войти в блок RunWithElevatedPrivileges или снаружи? – James

1

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

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

вместо

pubWeb.IncludeInCurrentNavigation = ложь;

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(); 
          } 
         } 
        } 
       });