Pergunta

Eu tenho um método no meu aspx.cs arquivo que deve certificar-se de que o usuário atual siga o site atual.Quando eu verificar ULS eu receber este:

FollowedContent.FollowItem:Exceção:A Microsoft.SharePoint.SPException:A validação de segurança para esta página são inválidos.Clique em Voltar no seu Navegador, atualize a página e tente a operação novamente.---> Do sistema.O tempo de execução.InteropServices.COMException:A validação de segurança esta página é inválido.Clique em Voltar no seu navegador, atualize a página e tente a operação novamente.0x8102006d

Não poderia seguir o url http://removedlink/

e

A Microsoft.Office.Server.Social.SPSocialFollowingManager.A seguir:A Microsoft.Office.Server.UserProfiles.FollowedContentException:InternalError :Não poderia seguir o item X em A Microsoft.Office.Server.UserProfiles.FollowedContent.FollowItem(FollowedItem item, Boolean isInternal)

Meu código tenha esta aparência:

 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 eu depuração esta é a exceção recebo .Execute() método:

{"A operação falhou devido a um erro interno ocorreu.Interno nome de tipo:A Microsoft.Office.Server.UserProfiles.FollowedContentException.Código de erro interno:11."}

Qualquer tipo de ajuda é bem-vinda

Foi útil?

Solução

Primeiro, você deve apenas usar o recém-criado SPSite e SPWeb instâncias dentro RunWithElevatedPrivileges delegação.Altere a seguinte linha no seu código

SPServiceContext context = SPServiceContext.GetContext(currentsite);

a este:

SPServiceContext context = SPServiceContext.GetContext(site);

Outro problema é a validação de segurança na página, e você precisa chamar ValidateFormDigest método antes de realizar a elevação desde o seu código executa a operação de gravação.Então adicione a seguinte linha antes de SPSecurity.RunWithElevatedPrivileges no seu código:

SPUtility.ValidateFormDigest();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top