如何检查具有特定ID的用户是否存在?

How to check if user with a specific ID exists?

我必须遍历 table 中包含用户字段的所有行。我必须找回那些用户并对他们做下流的事情:

private void GetUsrInfo(FieldUserValue user, ClientContext clientContext) {
    int id=user.LookupId;

    Web web = clientContext.Web;
    User spuser = web.GetUserById(id);
    clientContext.Load(spuser);
    clientContext.ExecuteQuery();
    Mail = spuser.Email;
}

这行得通。然而,这些是 "old" 个条目,其中很多人甚至已经不存在了。用户字段仍然包含现在被放弃的用户的数据,但是当我尝试通过 GetUserById() 检索用户数据时,我检索到以下异常:

Microsoft.SharePoint.Client.ServerException: User cannot be found.
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream(Stream responseStream) at Microsoft.SharePoint.Client.ClientRequest.ProcessResponse()

目前我只是捕获这些异常并继续处理下一个用户。 但这很糟糕而且很慢。 有没有更聪明的方法? "if web.UserExists(id)..."?

编辑

检查用户是否存在而不引发错误或创建新用户(作为 web.EnsureUser(@"domain\username") 方法的结果)的一种可能方法是在本地加载完整的用户集合并使用通过 Id 查找用户的 LINQ 语句。

例如:

UserCollection collUser = ctx.Web.SiteUsers;
ctx.Load(collUser);
ctx.ExecuteQuery();
var user = collUser.Cast<User>().FirstOrDefault(u => u.Id == 1);
if (null != user)
{           
    Console.WriteLine("User: {0} Login name: {1} Email: {2}",
            user.Title, user.LoginName, user.Email);
}       

如果有 ID == 1 的记录,它将被 return 编辑,否则 return 值将为空。

根据站点中的用户数量,这可能会带来性能问题,但是,根据您预计在检查用户 ID 时产生的异常数量,此解决方案可能是可行的。

参考:Csom or rest to verify user