我正在尝试使用 EnsureUser 让用户返回 SharePoint Client OM。我的代码是:
ClientContext clientContext = new ClientContext(siteUrl);
User spUser = clientContext.Web.EnsureUser(user);
其中 siteUrl 和 user 都是适当设置的字符串。
结果是 spUser 是 User 对象的外壳,但它的所有属性(例如电子邮件、标题等)都没有初始化。在 VS 中,它们显示{“属性或字段尚未初始化。尚未请求或请求尚未执行。可能需要显式请求。”}
这是什么原因造成的?我认为 EnsureUser 会创建该用户(如果该用户尚不存在)。我知道在 Server OM 中有时你需要使用“AllowUnsafeUpdates”,Client OM 有类似的东西吗?
几乎晚了一年,但以防万一其他人正在寻找相同的答案。 获得对用户对象的引用后,您需要在访问用户的属性之前执行以下操作。
clientContext.Load(spUser);
clientContext.ExecuteQuery();
或者如果您只想获取电子邮件和标题只是为了减少负载。
clientContext.Load(spUser, u => u.Email, u => u.Title);
clientContext.ExecuteQuery();
基本上,它会向 SharePoint Web 建立请求并询问 spUser 的属性。调用 ExecuteQuery() 时将发送请求。
即使我面临同样的问题,即使我的用户在 Azure Active Directory 中启用,它也会抛出异常 Microsoft.SharePoint.Client.Server 用户无法找到。但如果我们再次重试,它就会获取用户详细信息。您能对此提供一些见解吗? 此链接提供了我的问题的完整描述。