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
相关产品推荐
相关产品推荐

