使用C# Graph Client获取MS Graph API中deviceConfigurations的groupId失败
问题分析与解决方法
问题原因
Microsoft Graph Client SDK 里,DeviceConfigurationAssignment 的 Target 属性是抽象基类 DeviceConfigurationAssignmentTarget,但API返回的实际类型是 GroupAssignmentTarget(从响应里的 @odata.type 能确认)。直接通过基类访问 groupId 会因为基类没有该属性而报错,而 Id 是基类 Entity 的属性,所以能正常获取。
解决方案
把 Target 属性强制转换为具体的子类 GroupAssignmentTarget,再访问 GroupId 属性,同时建议加类型检查避免转换失败:
if (configAssignments.Value != null) { foreach (var item in configAssignments.Value) { Assignment assignment = new Assignment(); assignment.Id = item.Id; // 先判断类型再转换,安全访问GroupId if (item.Target is GroupAssignmentTarget groupTarget) { assignment.GroupID = groupTarget.GroupId; } Config.Assignments.Add(assignment); } }
补充说明
如果API可能返回其他类型的Target(比如AllDevicesAssignmentTarget、ExclusionGroupAssignmentTarget等),可以用分支判断处理不同情况:
switch (item.Target) { case GroupAssignmentTarget groupTarget: assignment.GroupID = groupTarget.GroupId; break; case AllDevicesAssignmentTarget _: // 处理"所有设备"的分配逻辑 break; // 其他Target类型的处理逻辑 }
内容的提问来源于stack exchange,提问作者adamwhiles
相关产品推荐
相关产品推荐

