cambiamento SharePoint PublishingWeb nel contesto di protezione elevato non riesce, perché?

StackOverflow https://stackoverflow.com/questions/3612903

  •  26-09-2019
  •  | 
  •  

Domanda

Ho problemi l'aggiornamento di un attributo di SharePoint publishingWeb sotto RunWithElevatedPrivileges. non riesce con l'eccezione "La convalida di protezione per questa pagina è valida" in questa linea: "pubWeb.IncludeInCurrentNavigation = false;". Di seguito è riportato il codice che sto cercando di eseguire. Normalmente è possibile impostare AllowUnsafeUpdates = true, ma publishingWeb di non avere questa proprietà speciale.

La mia domanda è che cosa è il modo corretto di aggiornamento publishingWeb attributi in un contesto elevata?

            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();
                        }
                    }
                }
            });
È stato utile?

Soluzione

Se questo cambiamento si verifica su un postback (un POST), si dovrebbe essere chiamando SPSecurity.ValidateFormDigest() prima di effettuare la modifica. AllowUnsafeUpdates viene utilizzato solo per richieste HTTP GET.

Se si tratta di una richiesta GET, mi sarei aspettato la linea commentata-out di aver lavorato, ma dal momento che è commentato Presumo non ha fatto. Vorrei suggerire di utilizzare:

pubWeb.Web.AllowUnsafeUpdates = true

come PublishingWeb è un involucro per un'istanza SPWeb, che è accessibile tramite la proprietà Web. È strano, però, mi sarei aspettato il SPWeb dotazione per essere stata la stessa istanza (e come tale la vostra linea commentato avrebbe dovuto funzionare.)

Altri suggerimenti

stava leggendo un po 'su come utilizzare questa proprietà

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

anziché

pubWeb.IncludeInCurrentNavigation = false;

pubWeb.IncludeInGlobalNavigation = false;

Non sono sicuro se questo è rilevante per ciò che il vostro cercando di realizzare.

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();
                            }
                        }
                    }
                });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top