我有这样的代码有条件地创建一个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“All Site Content”集市中删除它)有问题(可能是“不安全的更新”)?
答案 0 :(得分:1)
为了保护自己免受XSS和会话劫持之类的攻击,SharePoint网站的大多数更新都与嵌入在用户进行更改的同一页面上的表单摘要控件相关联。如果在触发更新时不存在来自该表单摘要控件的信息,则SharePoint将采用最差的方式。在服务器端代码可能以提升的权限执行的情况下,这一点尤为重要。
正如您所发现的那样,通过在进行任何更改之前立即将SPWeb对象的AllowUnsafeUpdates
属性切换为true
,可以轻松避免这种情况。