Microsoft graph api 当电子邮件存储在多个列中时通过电子邮件获取用户的查询
我的尝试:Microsoft graph api 当电子邮件存储在多个列中时通过电子邮件获取用户的查询,microsoft-graph-api,microsoft-graph-sdks,Microsoft Graph Api,Microsoft Graph Sdks,我的尝试: var user = (await client.Users.Request() .Select(x => new { x.Id, x.OtherMails, x.Identities }) .Filter($"otherMails/any(id:id eq 'zed@gmail.com') or identities/any(ids:ids/issuerassignedid eq 'zed@gmail.com')&qu
var user = (await client.Users.Request()
.Select(x => new { x.Id, x.OtherMails, x.Identities })
.Filter($"otherMails/any(id:id eq 'zed@gmail.com') or identities/any(ids:ids/issuerassignedid eq 'zed@gmail.com')")
.GetAsync());
它失败于:
不支持对属性标识的复杂查询
另见:
请注意,电子邮件/其他电子邮件字段未填充。
更新-修改后的查询失败,并显示相同的错误消息。
公共异步任务GetUserByEmailAddress(字符串电子邮件)
{
IGraphServiceUsersCollectionPage users=await client.users.Request()
.Select(x=>new{x.Id,x.Mail,x.othermail,x.identies})
.Filter($“mail eq'{email}或其他邮件/any(id:id eq'{email}')或Identifications/any(id:ids/issuerasignedid eq'{email}'和ids/signityType eq'emailAddress'))
.GetAsync();
if(users.Any())
返回用户[0];
返回null;
}
用户对象的标识和其他邮件属性支持所述的$filter
此外,在对标识对象进行筛选时,必须同时提供issuer和ISSUERASIGNEDID-有关详细信息,请参阅此
我不知道您的要求,但使用身份作为电子邮件过滤可能不是最佳选择,因为ID不一定是电子邮件。如果您正在查找电子邮件,您可以使用mail和其他邮件属性-https://graph.microsoft.com/beta/users?$filter=othermail/any(id:id-eq'mary@xx.live“)或邮件eq”mary@xx.live“Per:“错误消息已清除。您无法通过标识和某些附加属性进行筛选(由于不受支持)。”
因此,如果您需要通过电子邮件进行搜索,您必须将整个用户表加载到内存中。非常感谢您的回答。>此外,在对身份对象进行筛选时,您必须同时提供发卡机构和发卡机构签名ID的建议,谢谢。>如果您正在寻找电子邮件,您可以使用邮件和其他邮件属性,我不相信这是正确的。这些列没有填充。请参阅更新问题的屏幕上限。您是否在标识对象中获得IssueSigneId和SignnType?您可以在该signitype字段上进行查询。我认为,如果(其他邮件或标识)对于查询解析器来说太复杂,那么(其他邮件或(signitype和issuerasignedid))可能会失败。我只是在猜测。我会试试的。请看修改后的查询:请参阅更新后的帖子。请参阅。
https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'mary') or
startswith(givenName,'mary') or startswith(surname,'mary') or startswith(mail,'mary') or
startswith(userPrincipalName,'mary')
public async Task<User> GetUserByEmailAddress(string email)
{
IGraphServiceUsersCollectionPage users = await client.Users.Request()
.Select(x => new { x.Id, x.Mail, x.OtherMails, x.Identities })
.Filter($"mail eq '{email}' or otherMails/any(id:id eq '{email}') or identities/any(ids:ids/issuerassignedid eq '{email}' and ids/signintype eq 'emailAddress')")
.GetAsync();
if(users.Any())
return users[0];
return null;
}