引发空引用异常的 C# 目录条目对象安全属性

本文关键字:安全 属性 对象 引用 异常 | 更新日期: 2023-09-27 18:37:17

我正在尝试跟踪应用程序错误,但我不是WinNT提供程序方面的高手。这是我正在调试的代码:

 public string GetCurrentRequesterIdentity()
    {
        var a = HttpContext.Current.User.Identity.Name.Split('''');
        using (var adEntry = new DirectoryEntry("WinNT://" + a[0] + "/" + a[1]))
        {
            return adEntry.Properties["FullName"].Value.ToString();
        }
    }

当我调试此代码并运行"?New DirectoryEntry("WinNT://DOMAIN/User")",其中 DOMAIN 和 User 是(假定)有效的条目,该窗口为 ObjectSecurity 行返回以下内容:

ObjectSecurity: 'new DirectoryEntry("WinNT://[DOMAIN]/[USER]")。ObjectSecurity"抛出了一个类型为"System.NullReferenceException"的异常

我看到应用程序抛出"找不到网络路径"的错误。我只能复制此错误一次,而不是再次。不幸的是,对于 2 个生产用户来说,这种情况几乎每次都会发生,但在测试环境中从未发生过。

以前有人见过这种情况吗?或者知道去哪里寻找它?

引发空引用异常的 C# 目录条目对象安全属性

看起来 a[0] 或 a[1] 的值为 null。您是否验证了这些值是否正确以及域和用户是否存在?您应该调试或记录 a[0] 或 a[1] 的值,并尝试查找错误。

这最终通过删除 DirectoryEntry 行并仅引用 HttpContext.Current.User.Identity.Name.Split(''') 作为用户名来修复。它只返回用户名而不是登录用户的全名并不重要。显然,它与AD的权限问题有关,我们的系统管理员宁愿不处理,因此删除代码最终提供了最简单的解决方案。