el cambio de SharePoint PublishingWeb bajo el contexto de seguridad elevado falla, ¿por qué?

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Estoy teniendo problemas para actualizar un atributo de SharePoint publishingWeb bajo RunWithElevatedPrivileges. falla con la excepción de "La validación de seguridad para esta página es válida" en esta línea: "pubWeb.IncludeInCurrentNavigation = false;". A continuación se muestra el código que estoy tratando de correr. Normalmente se puede establecer AllowUnsafeUpdates = true, pero de publishingWeb no tienen esta propiedad especial.

Mi pregunta es ¿cuál es la forma correcta de actualización publishingWeb atributos en un contexto de elevada?

            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();
                        }
                    }
                }
            });
¿Fue útil?

Solución

Si este cambio se produce en una devolución de datos (POST), que debería estar llamando SPSecurity.ValidateFormDigest() antes de hacer el cambio. AllowUnsafeUpdates sólo se utiliza para peticiones HTTP GET.

Si se trata de una petición GET, que hubiera esperado la línea comentada de salida de haber trabajado, pero ya que ha comentado supongo que no lo hizo. Yo sugeriría que usted utilice:

pubWeb.Web.AllowUnsafeUpdates = true

como PublishingWeb es un contenedor para una instancia SPWeb, que es accesible a través de la propiedad Web. Es extraño, sin embargo, yo habría esperado que el SPWeb suministrado al haber sido la misma instancia (y como tal, su línea comentada debería haber funcionado.)

Otros consejos

estaba leyendo un poco sobre el uso de esta propiedad

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

en lugar de

pubWeb.IncludeInCurrentNavigation = false;

pubWeb.IncludeInGlobalNavigation = false;

No estoy seguro si esto es relevante para lo que su tratando de lograr.

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();
                            }
                        }
                    }
                });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top