我有一个隐藏的webpart,它读取查询字符串值“optout = Yes”。此optout =是,然后我需要更新配置文件属性。如果你看到我的代码。它在“ userprof.Commit()”失败并抛出“ GET请求当前不允许更新。要允许GET上的更新,请在SPWeb上设置'AllowUnsafeUpdates'属性“。对此有何解决方案?
private void OptOutMemberInvitation()
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//update the invitee's Profile property
UpdateInviteeOptOutProfile(InviteeConstitID);
});
}
private void UpdateInviteeOptOutProfile(string inviteeSiteColUrl)
{
ServerContext sc = ServerContext.Current;
UserProfileManager upm = new UserProfileManager(sc);
//Get the user profile
Microsoft.Office.Server.UserProfiles.UserProfile userprof = upm.GetUserProfile(MemberConstitID);
SPWeb web = userprof.PersonalSite.RootWeb;
//make sure we can update our list
web.AllowUnsafeUpdates = true;
web.Update();
//Update the OptOut Property on the user's profile.
userprof["OptOut"].Value = "Yes";
userprof.Commit(); //Fails here
//update the list item to persist it to list
web.AllowUnsafeUpdates = false;
//siteCol.Close();
//siteCol.Dispose();
}
答案 0 :(得分:1)
我们使用了“SPSecurity.RunWithElevatedPrivileges”,这意味着我们希望在此更新过程中使用应用池帐户上下文。但在函数“UpdateInviteeOptOutProfile”中,我们使用当前上下文而不是创建新网站> web对象。
请使用网址或ID创建新网站,然后创建网络对象。
答案 1 :(得分:0)
看起来您可能正在使用两个SPWeb对象,并在错误的上设置AllowUnsafeUpdates。一个将与当前服务器上下文连接,另一个是userprof.PersonalSite.RootWeb。您将在RootWeb上设置AllowUnsafeProperties,并在配置文件中更新SPWeb(如果有)。
BTW不要忘记在最后设置AllowUnsafeProperties后执行web.Update()。