在sharepoint中获取列表项时是否需要设置allowunsafeupdates属性?

时间:2015-04-16 07:09:05

标签: sharepoint sharepoint-2010 sharepoint-list splistitem

我是sharepoint 2010项目的新手。当我浏览代码时,在很多地方我发现SPWeb.AllowUnsafeUpdates属性设置为true,即使列表的任何元素都没有更新。有一些列表数据提取。这是否相关,而任何列表中没有使用AllowUnsafeUpdates设置为true的更新?

SPWeb thisWeb = workflowProperties.Web;
                        thisWeb.AllowUnsafeUpdates = true;
                        SPList EmployeeDetails = thisWeb.Lists[BasicEmployeeDetailsList];
                        SPList list = workflowProperties.Web.Lists[workflowProperties.List.ID];
                        SPListItem compensatoryLeaveItem = workflowProperties.Item;
                        DataTable creatermail = new DataTable();
                        editurl = workflowProperties.SiteUrl.ToString() + list.DefaultEditFormUrl + "?ID=" + compensatoryLeaveItem["ID"].ToString() + "&Popup=false";
                        string EmployeeDetailsID = compensatoryLeaveItem["Created By"].ToString().Substring(compensatoryLeaveItem["Created By"].ToString().IndexOf('#') + 1);
                        string listQuery = "<Where><Eq><FieldRef Name='LoginName' /><Value Type='User'>" + EmployeeDetailsID + "</Value></Eq></Where>";
                        SPQuery query = new SPQuery();
                        query.Query = listQuery;
                        SPListItemCollection createrCol = EmployeeDetails.GetItems(query);
                        creatermail = createrCol.GetDataTable();
                        createdbymail = creatermail.Rows[0][FieldMail].ToString();
                        creater = creatermail.Rows[0][FieldFullName].ToString();
                        GetHrDetails(thisWeb);
                        thisWeb.AllowUnsafeUpdates = false;

2 个答案:

答案 0 :(得分:0)

如果确实没有更新,那么据我所知,没有必要设置SPWeb.AllowUnsafeUpdates = true。要了解此属性的作用,我们可以引用MSDN documentation

  

获取或设置一个布尔值,该值指定是否允许因GET请求更新数据库或不需要安全验证。

进一步说:

  

将此属性设置为true会打开安全风险,可能会引入跨站点脚本漏洞。

因此,这旨在保护您的SharePoint网站。您应该尝试不要因GET请求或没有安全验证而更新SharePoint站点。您可能会在Hristo Pavlov's blog上找到更详细的解释。当我试图理解它时,我做了。

您发布的代码似乎没有执行更新,只读取数据,所以不,我认为它不相关。

答案 1 :(得分:0)

只有在更新期间才需要这样做。获取数据时不需要。