Question

J'ai une méthode dans mon fichier aspx.cs qui devrait garantir que l'utilisateur actuel suit le site actuel.Lorsque je vérifie ULS, je reçois ceci :

FollowedContent.FollowItem:Exception:Microsoft.SharePoint.SPException :La validation de sécurité pour cette page n'est pas valide.Cliquez sur Retour dans votre Navigateur Web, actualisez la page et réessayez votre opération.---> System.Runtime.InteropServices.COMException :La validation de la sécurité car cette page n’est pas valide.Cliquez sur Retour dans votre navigateur Web, actualisez le et essayez votre opération encore une fois.0x8102006d

Impossible de suivre l'URL http://removedlink/

et

Microsoft.Office.Server.Social.SPSocialFollowingManager.Follow :Microsoft.Office.Server.UserProfiles.FollowedContentException :Erreur interne :Impossible de suivre l’article X à Microsoft.Office.Server.UserProfiles.FollowContent.FollowItem(FollowItem item, booléen isInternal)

Mon code ressemble à ceci :

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

                            }
                        }
                    });
            }

Lorsque je débogue, c'est l'exception que j'obtiens avec la méthode .Follow() :

{"L'opération a échoué car une erreur interne s'est produite.Nom de type interne:Microsoft.Office.Server.UserProfiles.FollowedContentException.Code d'erreur interne :11."}

Tout type d'aide est apprécié

Était-ce utile?

La solution

Tout d’abord, vous ne devez utiliser que les instances SPSite et SPWeb nouvellement créées dans la délégation RunWithElevatedPrivileges.Modifiez la ligne suivante dans votre code

SPServiceContext context = SPServiceContext.GetContext(currentsite);

à celui-ci :

SPServiceContext context = SPServiceContext.GetContext(site);

Un autre problème est la validation de sécurité sur la page, et vous devez appeler ValiderFormDigest méthode avant d’effectuer l’élévation puisque votre code effectue l’opération d’écriture.Ajoutez donc la ligne suivante avant SPSecurity.RunWithElevatedPrivileges dans votre code :

SPUtility.ValidateFormDigest();
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top