Seguire a livello di programmazione un sito, ma ricevendo un errore
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
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();
.