GET请求目前不允许更新。要允许GET上的更新,请在SPWeb上设置“AllowUnsafeUpdates”属性

时间:2010-04-22 22:33:52

标签: sharepoint

我有一个隐藏的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();
}

2 个答案:

答案 0 :(得分:1)

我们使用了“SPSecurity.RunWithElevatedPrivileges”,这意味着我们希望在此更新过程中使用应用池帐户上下文。但在函数“UpdateInviteeOptOutProfile”中,我们使用当前上下文而不是创建新网站> web对象。

请使用网址或ID创建新网站,然后创建网络对象。

答案 1 :(得分:0)

看起来您可能正在使用两个SPWeb对象,并在错误的上设置AllowUnsafeUpdates。一个将与当前服务器上下文连接,另一个是userprof.PersonalSite.RootWeb。您将在RootWeb上设置AllowUnsafeProperties,并在配置文件中更新SPWeb(如果有)。

BTW不要忘记在最后设置AllowUnsafeProperties后执行web.Update()。