Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Microsoft graph api 当电子邮件存储在多个列中时通过电子邮件获取用户的查询_Microsoft Graph Api_Microsoft Graph Sdks - Fatal编程技术网

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;
    }