我有一个MVC 3内部网应用程序,它执行针对特定域的Windows身份验证.我想呈现当前用户的名字.
在视图中,
@User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
设置为DOMAIN\Username,我想要的是他们的全部Firstname Lastname
vcs*_*nes 56
你可以这样做:
using (var context = new PrincipalContext(ContextType.Domain))
{
var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
var firstName = principal.GivenName;
var lastName = principal.Surname;
}
Run Code Online (Sandbox Code Playgroud)
您需要添加对System.DirectoryServices.AccountManagement程序集的引用.
您可以像这样添加Razor助手:
@helper AccountName()
{
using (var context = new PrincipalContext(ContextType.Domain))
{
var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
@principal.GivenName @principal.Surname
}
}
Run Code Online (Sandbox Code Playgroud)
如果您从视图而不是控制器中执行此操作,则还需要向web.config添加程序集引用:
<add assembly="System.DirectoryServices.AccountManagement" />
Run Code Online (Sandbox Code Playgroud)
添加下configuration/system.web/assemblies.
另一种选择,无需帮助程序......您可以在需要使用这些值之前声明上下文和主体,然后像标准输出一样使用它...
@{ // anywhere before needed in cshtml file or view
var context = new PrincipalContext(ContextType.Domain);
var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
}
Run Code Online (Sandbox Code Playgroud)
然后在文档中的任何位置,只需根据需要调用每个变量:
@principal.GivenName // first name
@principal.Surname // last name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26924 次 |
| 最近记录: |