Программно подписываетесь на сайт, но получаете ошибку

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/74345

  •  10-12-2019
  •  | 
  •  

Вопрос

В моем файле aspx.cs есть метод, который должен гарантировать, что текущий пользователь следует текущему сайту.Когда я проверяю ULS, я получаю это:

FollowedContent.FollowItem:Exception:Microsoft.SharePoint.SPException:Проверка безопасности для этой страницы недействительна.Нажмите на свой веб -браузер, обновите страницу и попробуйте свою операцию снова.---> System.Runtime.InterOpservices.comexception:Проверка безопасности для этой страницы недействительна.Нажмите на свой веб -браузер, обновите страницу и попробуйте свою операцию еще раз.0x8102006D

Не удалось перейти по URL http://removedlink/

и

Microsoft.Office.Server.Social.SPSocialFollowingManager.Follow:Microsoft.Office.Server.UserProfiles.FollowedContentException:Внутренняя ошибка :Не удалось следовать за элементом x на microsoft.office.server.userprofiles.followedcontent.followitem (следовал элемент, логический Isinternal)

Мой код выглядит следующим образом:

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

                            }
                        }
                    });
            }

Когда я отлаживаю это, это исключение, которое я получаю в методе .Follow():

{"Операция не удалась, поскольку произошла внутренняя ошибка.Имя внутреннего типа:Microsoft.Office.Server.UserProfiles.FollowedContentException.Код внутренней ошибки:11."}

Любая помощь приветствуется

Это было полезно?

Решение

Во-первых, вам следует использовать только вновь созданные экземпляры SPSite и SPWeb внутри делегирования RunWithElevatedPrivileges.Измените следующую строку в своем коде

SPServiceContext context = SPServiceContext.GetContext(currentsite);

на этот:

SPServiceContext context = SPServiceContext.GetContext(site);

Другая проблема — проверка безопасности на странице, и вам нужно позвонить Проверка формыдайджеста перед выполнением повышения прав, поскольку ваш код выполняет операцию записи.Поэтому добавьте следующую строку перед SPSecurity.RunWithElevatedPrivileges в свой код:

SPUtility.ValidateFormDigest();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top