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

.NET 4.8中使用MsGraph无法从DirectoryObject提取sAMAccountName

问题分析与解决方案

问题根源

你遇到的NullReferenceException是因为反射调用时使用的属性名格式错误:

  • 你传入的onPremisesSamAccountName是小驼峰格式,但C# CLR属性采用PascalCase(首字母大写)命名,实际属性名为OnPremisesSamAccountName,导致GetProperty返回null,后续调用GetValue触发空引用异常。
  • 而DisplayName、UserPrincipalName你用了首字母大写的正确格式,所以能正常获取属性值。

解决方案

方案一:修正反射属性名

将调用反射方法的参数改为首字母大写的正确格式:

user.ManagerUpperID = GetDirObjPropertyValue(manager, "OnPremisesSamAccountName");

方案二:使用强类型访问(推荐)

经理对象本质是User类型,直接转换后访问强类型属性,完全避免反射的潜在问题:

GraphServiceClient graphServiceClient = this.GetGraphServiceClient();
var managerInfo = await graphServiceClient.Me.Manager
    .Request()
    .Select("onPremisesSamAccountName,displayName,jobTitle,userPrincipalName,directreports")
    .GetAsync();

var managerUser = managerInfo as User;
if (managerUser != null)
{
    user.ManagerUpperEmail = managerUser.UserPrincipalName;
    user.ManagerUpperName = managerUser.DisplayName;
    user.ManagerUpperID = managerUser.OnPremisesSamAccountName;
}

优化反射方法(可选)

给反射方法增加空判断,避免后续再出现类似空引用问题:

private string GetDirObjPropertyValue(DirectoryObject dObj, string key)
{
    var property = dObj.GetType().GetProperty(key);
    if (property == null) return null;
    var value = property.GetValue(dObj, null);
    return value?.ToString();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:43:22