2012-01-17 13 views

cevap

52

:

using (var context = new PrincipalContext(ContextType.Domain)) 
{ 
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name); 
    var firstName = principal.GivenName; 
    var lastName = principal.Surname; 
} 

Sen gerekir System.DirectoryServices.AccountManagement aksamına bir başvuru ekleyin.

Öyle gibi Jilet yardımcı ekleyebilirsiniz: Eğer siz de web.config için bir derleme başvurusu eklemem gerekiyor ziyade denetleyici yerine, görünümden bunu üzerine indend Eğer

@helper AccountName() 
    { 
     using (var context = new PrincipalContext(ContextType.Domain)) 
    { 
     var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name); 
     @principal.GivenName @principal.Surname 
    } 
} 

:

<add assembly="System.DirectoryServices.AccountManagement" /> 

Bunu configuration/system.web/assemblies'un altına ekleyin. Bu değerleri kullanmak ve ardından bir standart çıkışa gibi kullanmaya gerek önce

+0

Sadece jilet yardımcı uygulamaya çalıştı ve bir hata atıyor :

public static string GetFullName(this IIdentity id) { if (id == null) return null; using (var context = new PrincipalContext(ContextType.Domain)) { var userPrincipal = UserPrincipal.FindByIdentity(context, id.Name); return userPrincipal != null ? $"{userPrincipal.GivenName} {userPrincipal.Surname}" : null; } } 

Ve sonra görünümünde kullanabilirsiniz referansı bulamıyor), ancak System.DirectoryServices.AccountManagement kullanarak C# dosyaları çalışır ve dll proje referansları, herhangi bir fikirde yer alıyor? –

+4

Figured, "DLL yerel" özelliğini true olarak ayarlamak zorunda kaldı. :) –

+3

MVC4 için, web.config 'ın ' in 'yapılandırma/system.web/pages/namespaces' içinde olması gerekir. – Lawtonfogle

7

Diğer bir seçenek, bir yardımcı gerektirmeden ... Sadece içinde herhangi bir yerde Sonra ...

@{ // anywhere before needed in cshtml file or view 
    var context = new PrincipalContext(ContextType.Domain); 
    var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name); 
} 

bağlam ve müdürü olduğuna dair karar belge, sadece gerektiği kadar her değişkeni çağırır: Identity 2 geçiş yaptık ve iddiaları kullanıyorsanız

@principal.GivenName // first name 
@principal.Surname // last name 
+1

Bu aslında bir öncekiyle aynı cevaptır, ancak bir yardımcıya ihtiyaç duymama benim fikrimde bir artı değildir, bu yüzden cevabınızı daha iyi seviyorum. :) –

1

ardından bilgi bu tür bir iddia olacaktır. Uzatma yöntemi oluşturmayı deneyin:

public static string GetFullName(this IIdentity id) 
{ 
    var claimsIdentity = id as ClaimsIdentity; 

    return claimsIdentity == null 
     ? id.Name 
     : string.Format("{0} {1}", 
      claimsIdentity.FindFirst(ClaimTypes.GivenName).Value, 
      claimsIdentity.FindFirst(ClaimTypes.Surname).Value); 
} 

Sonra böyle görünümünde kullanabilirsiniz:

@Html.ActionLink("Hello " + User.Identity.GetFullName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" }) 
+0

Hi @Sinaesthetic.Bana ClaimsIdentity'yi scartch'tan açıklayan bir link verebilir misin? – Kulkarni

+0

https://msdn.microsoft.com/en-us/library/ff423674.aspx – Sinaesthetic

1

sonra ağrılı olabilir @vcsjones yaklaşımını kullanarak birçok denetleyicileri varsa. Bu nedenle, TIentity için uzantı yöntemi oluşturmanızı öneririm. (

<p>Hello, @User.Identity.GetFullName()!</p> 
İlgili konular