0

我有这样的代码来有条件地创建一个 Sharepoint 列表(有点像 upsert):

private void ConditionallyCreateList()
{
    SPWeb site = SPContext.Current.Web;
    // Check to see if list already exists; if so, exit
    if (site.Lists.TryGetList(listTitle) != null) return;

    SPListCollection lists = site.Lists;
    SPListTemplateType listTemplateType = new SPListTemplateType();
    listTemplateType = SPListTemplateType.GenericList;
    string listDescription = "This list retains vals inputted for the Post Travel form";
    Guid ListId = lists.Add(listTitle, listDescription, listTemplateType);
    . . .

这在首次创建和应用程序的后续执行时有效。

但是,我对列表结构进行了一些彻底的重构并删除了旧的,以便(我希望)创建一个具有新结构的新结构。但是,我没有得到重构列表,而是在上面显示的最后一行得到了这个:

Microsoft.SharePoint.SPException was unhandled by user code
  Message=Updates are currently disallowed on GET requests.  To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.

我能够通过添加指示的代码来解决这个问题:

site.AllowUnsafeUpdates = true;

...但为什么这是必要的?为什么创建一个不再存在的列表(我从 Sharepoint“所有站点内容”集市中删除它)有问题(可能是“不安全的更新”)?

4

1 回答 1

1

为了保护自己免受 XSS 和会话劫持等事件的影响,SharePoint 网站的大多数更新都与嵌入在用户进行更改的同一页面上的表单摘要控件相关联。如果在触发更新时该表单摘要控件中的信息不存在,SharePoint 会假定最坏的情况。这在服务器端代码可能以提升的权限执行的情况下尤其重要。

正如您所发现的,这很容易通过在进行任何更改之前将 SPWeb 对象的AllowUnsafeUpdates属性切换为 来避免。true

于 2015-10-21T02:26:26.200 回答