You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Graph .NET SDK:用户查询Select参数大小写无关,成员查询则否?

为何Azure Graph API .NET SDK查询组成员时无法使用nameof语法?

这是因为用户查询和组成员查询返回的实体类型本质不同:

  • 用户查询(Users.GetAsync):返回的是明确的User类型集合,SDK内部已将C#类的DisplayName等属性与Graph API的驼峰字段名(displayName)做了映射。当你用nameof(User.DisplayName)得到字符串"DisplayName"时,SDK会自动将其转换为Graph API识别的displayName,因此查询能正常返回数据。

  • 组成员查询(Groups/{id}/Members.GetAsync):返回的是DirectoryObject类型的集合——这是User、Group、Device等目录实体的基类。由于返回结果是多态类型,SDK无法确定你指定的nameof(User.DisplayName)对应哪个派生类的属性,不会自动做属性名到Graph API字段名的转换,直接将"DisplayName"作为查询参数发送给API。但Graph API的字段名是驼峰格式的displayName,因此API无法匹配到对应字段,导致返回的实体中没有这些属性,最终AdditionalData为空。

解决方法

  1. 直接使用Graph API原生驼峰字段名:就是你当前可行的方式,直接传入"displayName"、"mail"等字符串。

  2. 指定返回类型为User:调用成员查询时,明确指定只返回User类型的成员,这样SDK就能正确识别属性映射,支持nameof语法:

    var usersResponse = await _graphServiceClient.Groups[azureGroupId].Members["microsoft.graph.user"].GetAsync(request =>
    {
        request.QueryParameters.Select = new[]
        {
            nameof(User.DisplayName),
            nameof(User.Mail),
            nameof(User.PreferredLanguage)
        };
    }, cancellationToken: cancellationToken);
    

    这里通过Members["microsoft.graph.user"]指定只获取用户类型的成员,返回结果直接是User集合,和用户查询的逻辑一致,nameof就能正常工作了。


内容的提问来源于stack exchange,提问作者DTul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:45:30