我越来越困惑,因为我做错了。我之前做了很多次,但不确定为什么这次不工作。这是一个代码;
dynamic fileOrFolder;
if (model.IsFolder)
fileOrFolder = _clientContext.Web.GetFolderByServerRelativeUrl(serverRelativeUrl);
else
fileOrFolder = _clientContext.Web.GetFileByServerRelativeUrl(serverRelativeUrl);
我在下面尝试了ALL但没有任何效果;
_clientContext.Load(fileOrFolder, item => item.Include(file => file.ListItemAllFields));
dynamic blhasUniquePermission = fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments;
OR
_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments);
OR
_clientContext.Load(fileOrFolder.ListItemAllFields,
items => items.Include(
item => item.Id,
item => item.DisplayName,
item => item.HasUniqueRoleAssignments));
OR
_clientContext.Load(fileOrFolder.ListItemAllFields, "Include(HasUniqueRoleAssignments)");
_clientContext.ExecuteQuery();
每次它立即在Load行本身或ExecuteQuery上抛出错误。我们deffo知道ListItemAllFields集合中有属性,那为什么要这样做呢?
答案 0 :(得分:0)
看起来您使用dynamic
关键字来破解C#,让您创建fileOrFolder
变量并存储其中两个不相关类型之一的实例。
不仅奇怪,而且通过这样做,你也使智能感知和编译器瘫痪。
采取这一行:
_clientContext.Load(fileOrFolder, item => item.Include(file => file.ListItemAllFields));
它可能会在运行时抛出,因为Include
或Microsoft.SharePoint.Client.File
类型都没有Microsoft.SharePoint.Client.Folder
方法。如果您没有使用dynamic
,则会收到明确的编译错误。
这一个:
_clientContext.Load(fileOrFolder.ListItemAllFields.HasUniqueRoleAssignments);
不起作用,因为_clientContext.Load
采用Microsoft.SharePoint.Client.ClientObject
的实例。但同样,编译器并不知道参数是什么,因为它来自动态对象。在编辑器中没有红色波浪形,而是出现运行时错误。
这应该有效:
ListItem itemAndOnlyItem = null;
if (model.IsFolder)
{
var folder = _clientContext.Web.GetFolderByServerRelativeUrl(serverRelativeUrl);
itemAndOnlyItem = folder.ListItemAllFields;
}
else
{
var file = _clientContext.Web.GetFileByServerRelativeUrl(serverRelativeUrl);
itemAndOnlyItem = file.ListItemAllFields;
}
_clientContext.Load(itemAndOnlyItem,
item => item.HasUniqueRoleAssignments);
_clientContext.ExecuteQuery();
var result = itemAndOnlyItem.HasUniqueRoleAssignments;