Domanda

Ho un metodo nel mio file ASPX.CS che dovrebbe assicurarsi che l'utente corrente segua il sito corrente. Quando controllo ULS ricevo questo:

.

seguitoContent.FollowItem: Eccezione: Microsoft.SharePoint.spexception: La convalida della sicurezza per questa pagina non è valida. Fai clic sul tuo Browser Web, aggiorna la pagina e prova di nuovo il funzionamento. --- >. System.Runtime.interopservices.Comexception: la convalida della sicurezza Per questa pagina non è valido. Fai clic sul tuo browser Web, aggiorna il pagina e prova la tua operazione ancora.0x8102006d

Impossibile seguire l'URL http://removedlink/

e

.

microsoft.office.server.social.spsocialFollowingManager.Follow: Microsoft.office.server.userprofiles.FollowedContentException: InternalError: Impossibile seguire l'oggetto X AT Microsoft.office.server.userprofiles.followedcontent.followitem (Weditem. Articolo, booleano Isinternal)

Il mio codice sembra questo:

 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);

                            }
                        }
                    });
            }
.

Quando Debug è questa è l'eccezione che ottengo a .Follow () Method:

.

{"L'operazione non è riuscita perché si è verificato un errore interno. interno Digitare il nome: Microsoft.office.server.userprofiles.FollowedContentException. Codice di errore interno: 11. "}

Qualsiasi tipo di aiuto è apprezzato

È stato utile?

Soluzione

In primo luogo, è necessario utilizzare solo istanze SPSite e SPWeb appena create all'interno della delegazione RunwithelevatedPrivileges.Modifica la seguente riga nel tuo codice

SPServiceContext context = SPServiceContext.GetContext(currentsite);

A questo:

SPServiceContext context = SPServiceContext.GetContext(site);
.

Un altro problema è la convalida della sicurezza sulla pagina, e devi chiamare ValidateFormDigest Metodo prima di eseguire l'elevazione poiché il codice esegue l'operazione di scrittura.Quindi aggiungi la seguente riga prima di spsecurity.runwitelevareProvileges nel tuo codice:

SPUtility.ValidateFormDigest();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top