C# 主体上下文错误"Server names cannot contain a space character"



我得到以下错误

使用PrincipalContext获取域用户信息时,"服务器名称不能包含空格字符"。

这段代码在我的机器上本地工作,但当我把它加载到Intranet web服务器上时就会失效。

            //GET CURRENT USER 
            String winUser = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
            string[] domainUsername = winUser.Split(Convert.ToChar(@""));
            // set up domain context
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domainUsername[0]);
            // find a user
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, domainUsername[1]);
            return user;

对我来说,这是因为PrincipalContext的以下设置。

并在将应用程序池的标识从ApplicationPoolIdenity更改为LocalSystem后解决。

这不是一个真正的解决方案,但可能会对某些人有所帮助。

PrincipalContext pc = new PrincipalContext((Environment.UserDomainName == Environment.MachineName ?
            ContextType.Machine : ContextType.Domain), Environment.UserDomainName);

之所以会发生这种情况,是因为如果没有指定容器,则主体上下文类将通过绑定到内置的CN=Users容器来创建System.DirectoryServices.DirectoryEntry对象,以开始搜索用户。系统

请考虑此链接上的示例以及关于异常页面的示例。

最新更新