我们遇到的问题是,从其他域读取时无法获得用户全名。
例如:我的用户名是dom1 \ jsmith,全名是John Smith。在dom1域中部署项目时,我们可以登录并获取用户的全名。当我们在用户(dom1 \ jsmith)具有登录权限的另一个域(dom2)中部署该项目时,它可以访问该站点,但无法获得全名。
我们尝试了不同的解决方案,但是没有用。
//output: dom1\jsmith
User.Identity.Name;
//output: dom1\jsmith
string s = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
//output: dom1\jsmith
string sUserName = System.Environment.UserName;
//output: John Smith in same domain but not able to find identity
using (var context = new PrincipalContext(ContextType.Domain))
{
var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
if (principal != null)
var fullName = string.Format("{0} {1}", principal.GivenName, principal.Surname);
答案 0 :(得分:1)
将登录域的名称传递到PrincipalContext
的构造函数中。因此,请拆分您拥有的DOMAIN\username
,并仅使用域部分:
var split = User.Identity.Name.Split('\\');
using (var context = new PrincipalContext(ContextType.Domain, split[0])) {
...
}
尽管令我惊讶的是,它无法像您所拥有的那样起作用,因为它适用于我,并且我登录的域与我的计算机所连接的域不同。尽管就我而言,这两个域位于同一个AD林中。也许情况并非如此。