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

Microsoft Graph .NET Core SDK突发类型转换错误求助

解决Microsoft Graph SDK获取用户AAD组时的InvalidCastException问题

问题原因

MemberOf接口返回的是用户所属的全部目录对象,并非只包含Group类型。之前你的代码能正常运行,大概率是因为当时用户没有加入任何AdministrativeUnit(行政单元);近期用户或租户配置变更,用户被加入了某个行政单元,导致接口返回结果里混入了AdministrativeUnit类型的对象,而你用Cast<Group>()强制转换所有对象,自然就触发了类型转换异常。

修复方案

不要直接强制转换所有返回对象,改用OfType<Group>()筛选出仅属于Group类型的对象,这样就能自动跳过AdministrativeUnit等其他类型的对象。

修改后的完整代码:

public List<string> GetUserGroups(string name)
{
    if (name == null)
    {
        throw new ArgumentNullException(nameof(name));
    }
    
    var groups = new List<string>();
    var userGroups = _graphServiceClient.Users[name].MemberOf.Request().GetAsync().Result;
    bool hasNextPage;
   
    do
    {
        hasNextPage = userGroups.NextPageRequest != null;
        // 用OfType<Group>()替代Cast<Group>(),自动筛选Group类型对象
        groups.AddRange(userGroups.CurrentPage.OfType<Group>().Select(x => x.DisplayName));

        if (hasNextPage)
        {
            userGroups = userGroups.NextPageRequest.GetAsync().Result;
        }
    }
    while (hasNextPage);

    return groups;
}

额外说明

如果之后需要同时获取用户所属的AdministrativeUnit,可以单独用OfType<AdministrativeUnit>()筛选该类型对象并处理,但当前需求仅获取组,上面的修改就足够解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:56:22