Pregunta

Tengo un método en mi archivo ASPX.CS que debe asegurarse de que el usuario actual siga el sitio actual. Cuando reviso ULS, recibo esto:

SIGUIENTECONTENT.FOLOWITEM: Excepción: Microsoft.SharePoint.SpException: La validación de seguridad para esta página no es válida. Haga clic en su Navegador web, actualice la página e intente su operación nuevamente. ---> System.Runtime.Enteropservices.Compartir: la validación de seguridad Para esta página no es válido. Haga clic en el navegador web, actualice el Página, e prueba tu operación. otra vez.0x8102006d

no se pudo seguir el url http://removedlink/

y

microsoft.office.server.social.spsocialfollowingmanager.follow: Microsoft.office.server.userProfiles.FollowedContentException: INTERNEDERROR: NO PODRÍA SIGUIENTE EL ARTÍCULO X en Microsoft.Office.Server.UserProfiles.FollowedContent.FollowItem (Siguiéndose Artículo, booleano isinternal)

Mi código se ve así:

 protected void ToggleUserFollowSite(object sender, EventArgs e)
        {

                var spWeb = SPContext.Current.Web;
                var currentsite = SPContext.Current.Site;
                var currentUser = spWeb.CurrentUser.LoginName;
                SPSecurity.RunWithElevatedPrivileges(delegate
                    {
                        using (var site = new SPSite(spWeb.Site.ID))
                        {
                            using (var web = site.OpenWeb(spWeb.ID))
                            {


                                SPServiceContext context = SPServiceContext.GetContext(currentsite);                                                                      
                                var profile = new UserProfileManager(context);                                    
                                var user = profile.GetUserProfile(currentUser);                                   
                                var followingManager = new SPSocialFollowingManager(user, context);                                    
                                var actorInfo = new SPSocialActorInfo();
                                actorInfo.ActorType = SPSocialActorType.Site;
                                actorInfo.ContentUri = new Uri(web.Url);
                                followingManager.Follow(actorInfo);

                            }
                        }
                    });
            }

Cuando deprimo esto, esta es la excepción que recibo en el método. Sigue ():

{"La operación falló porque ocurrió un error interno. Interno escribe un nombre: Microsoft.office.server.userProfiles.FollowedContentException. Código de error interno: 11. "}

Se aprecia cualquier tipo de ayuda

¿Fue útil?

Solución

Primero, solo debe usar instancias de SPSITE y SPWEB recién creadas dentro de la delegación de Privilegios de RunwitheleVented.Cambie la siguiente línea en su código

SPServiceContext context = SPServiceContext.GetContext(currentsite);

a este:

SPServiceContext context = SPServiceContext.GetContext(site);

Otro problema es la validación de seguridad en la página, y debe llamar a ValidateFormDigest Método antes de realizar la elevación ya que su código realiza la operación de escritura.Así que agregue la siguiente línea antes de SPSECURITY.RUNWITHELEVATEDPRIVIEGEPLIVIGES en su código:

SPUtility.ValidateFormDigest();

Licenciado bajo: CC-BY-SA con atribución
scroll top