sharepointonlinecredentials online jsom examples c# sharepoint

c# - jsom - sharepoint online client components sdk



Sharepoint c#recuperar todos los sitios y subsitios (3)

Intento recuperar todos los sitios y subsitios en sharepoint pero recibo acceso denegado.

Leí sobre el uso de la propiedad GetSubwebsForCurrentUser (), pero recibo el mismo mensaje.

Mi código es el siguiente

foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications) { foreach (SPSite siteCollection in webApp.Sites) { foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser()) { dropDownSite.Items.Add(web.Url); } } }

por favor necesito ayuda! ¡Gracias!


Probablemente necesites llamar a SPSecurity.RunWithElevatedPrivileges(delegate())

Puede hacer un delegado en línea si lo desea, algo como:

SPSecurity.RunWithElevatedPrivileges(delegate() { foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications) { foreach (SPSite siteCollection in webApp.Sites) { foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser()) { dropDownSite.Items.Add(web.Url); } } } });


Solo para asegurarse, ¿se está ejecutando este código en el servidor que aloja el portal Sharepoint? ¿Qué versión de Sharepoint estás ejecutando?

Además, ¿tendría sentido utilizar los servicios web que expone Sharepoint? http://msdn.microsoft.com/en-us/library/aa979690(v=office.12).aspx

Si está ejecutando este código en el mismo servidor que SP, asegúrese de que sus credenciales tengan acceso a SP. Si llama desde un sitio web, asegúrese de que no se está ejecutando como "Anónimo".

Sobre todo, creo que aprovechar los servicios web es la forma más fácil de hacerlo funcionar. Pero asegúrese de que tiene los permisos correctos que se envían y que ese usuario tiene acceso (en las configuraciones de SP) a esa información.

¡Espero que ayude!


Si usa SPSite.AllWebs, aparece el mensaje Acceso denegado. Esta declaración solo es correcta siempre que el usuario actual sea un administrador de colección de sitios

Entonces, para todos los usuarios, esta función obtiene todos los sitios y sitios secundarios.

public static IEnumerable<SPWeb> DescendantSites(this SPWeb input) { foreach (SPWeb web in input.GetSubwebsForCurrentUser()) { yield return web; foreach (var subnode in web.DescendantSites()) yield return subnode; } }