cambiamento SharePoint PublishingWeb nel contesto di protezione elevato non riesce, perché?
-
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();
}
}
}
});
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();
}
}
}
});