Программно подписываетесь на сайт, но получаете ошибку
Вопрос
В моем файле 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();