2008-11-04 11 views

ответ

233

Если вам необходимо получить пользователю в контроллере, используйте User свойство контроллера. Если вам нужно это из представления, я бы заполнил то, что вам нужно в ViewData, или вы могли бы просто позвонить пользователю, поскольку я думаю, что это свойство ViewPage.

+2

"или вы могли бы просто позвонить пользователю, как я думаю, это свойство ViewPage" - Так вы имеете в виду использование page.user, когда вы находитесь в представлении? – mawaldne 2009-11-28 20:14:39

+14

Да, вы можете использовать его как «Привет, @ User.Identity.Name!» в cshtml. – Sean 2014-08-08 20:49:25

16

Я использую:

Membership.GetUser().UserName 

Я не уверен, что это будет работать в ASP.NET MVC, но это стоит выстрел :)

+0

Где это членство класс пришел? IntelliSense не распознает его по умолчанию. – 2008-11-04 21:31:00

+0

Пространство имен System.Web.Security. Я не уверен, что это полезно в MVC, но я использую его с элементами управления входами для веб-форм. – Sean 2008-11-04 21:57:05

+1

Это полезно в любом приложении ASP.NET, которое использует поставщиков членства. – jamiebarrow 2010-08-31 19:30:54

53

Попробуйте HttpContext.Current.User.

Public Shared Current Property() As System.Web.HttpContext
Член System.Web.HttpContext

Резюме:
Получает или задает объект System.Web.HttpContext для текущего HTTP запрос.

Возвращаемые значения:
System.Web.HttpContext для текущего запроса HTTP

+2

Очевидно, что HttpContext не имеет свойства «Current». – 2008-11-04 21:33:21

+19

Думаю, вы двое говорите о двух разных вещах. System.Web.HttpContext и статическое свойство: System.Web.Mvc.Controller.HttpContext (который не имеет свойства «Current»). – 2008-11-04 23:31:25

+1

Это работало в среде, отличной от MVC, именно то, что мне нужно.) – wdanda 2010-08-17 19:10:15

20

Я понимаю, что это на самом деле старый, но я просто начать работу с ASP.NET MVC, так что я бы придерживаться мои два цента:

  • Request.IsAuthenticated говорит вам, если проверка подлинности пользователя ,
  • дает вам идентификатор вошедшего в систему пользователя.
172

Я обнаружил, что User работы, то есть User.Identity.Name или User.IsInRole("Administrator").

+0

Большая помощь. Im on MVC3 – 2011-07-25 02:17:18

11

получение авторизовались пользователя: System.Web.HttpContext.Current.User.Identity.Name

3
IPrincipal currentUser = HttpContext.Current.User; 
bool writeEnable = currentUser.IsInRole("Administrator") || 
     ... 
        currentUser.IsInRole("Operator"); 
4

Для чего это стоит, в ASP.NET MVC 3 можно использовать только пользователь, который возвращает пользователя для текущего запроса.

4

Если вы находитесь на своей странице входа в систему, например, в LoginUser_LoggedIn, Current.User.Identity.Name вернет пустое значение, поэтому вы должны использовать свойство yourLoginControlName.UserName.

MembershipUser u = Membership.GetUser(LoginUser.UserName); 
9

Чтобы ссылаться на идентификатор пользователя, созданный с использованием простой аутентификации, встроенной в ASP.NET MVC 4 в контроллере для целей фильтрации (что полезно, если вы сначала используете базу данных и Entity Framework 5 для генерации кодовых первых привязок, а ваши таблицы структурированы так, чтобы использовался внешний ключ для идентификатора пользователя), вы можете использовать

WebSecurity.CurrentUserId 

после добавления с помощью заявления

using System.Web.Security; 
33

вы можете получить имя пользователя в ASP.NET MVC4 так:

System.Web.HttpContext.Current.User.Identity.Name 
2
var ticket = FormsAuthentication.Decrypt(
        HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName].Value); 

if (ticket.Expired) 
{ 
    throw new InvalidOperationException("Ticket expired."); 
} 

IPrincipal user = (System.Security.Principal.IPrincipal) new RolePrincipal(new FormsIdentity(ticket)); 
5

Использование System.Security.Principal.WindowsIdentity.GetCurrent().Name.

Будет получен текущий пользователь Windows.

1

Если вам случится работать в Active Directory в интрасети, вот несколько советов:

(Windows Server 2012)

Запуск ничего, что говорит с AD на веб-сервере требует кучу изменений и терпение. Поскольку при работе на веб-сервере и локальном IIS/IIS Express он запускается в идентификаторе AppPool, поэтому вы должны настроить его для олицетворения тех, кто попадает на сайт.

Как получить текущий вошедшего пользователя в активном каталоге, когда ваше приложение ASP.NET MVC работает на веб-сервере внутри сети:

// Find currently logged in user 
UserPrincipal adUser = null; 
using (HostingEnvironment.Impersonate()) 
{ 
    var userContext = System.Web.HttpContext.Current.User.Identity; 
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null, 
               ContextOptions.Negotiate | ContextOptions.SecureSocketLayer); 
    adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name); 
} 
//Then work with 'adUser' from here... 

Вы должны обернуть любые вызовы, имеющие отношение к «активный контекст каталога» в следующем, так что это действует как хостинг среды для получения информации о AD:

using (HostingEnvironment.Impersonate()){ ... } 

Вы также должны иметь impersonate значение ИСТИНА в вашем web.config:

<system.web> 
    <identity impersonate="true" /> 

Вы должны быть проверка подлинности Windows на в web.config:

<authentication mode="Windows" /> 
5

UserName с:

User.Identity.Name 

Но если вам нужно получить только ID, вы можете использовать:

using Microsoft.AspNet.Identity; 

Таким образом, вы можете получить Пользователь ID:

User.Identity.GetUserId(); 
1

Вы можете использовать следующий код:

Request.LogonUserIdentity.Name; 
1

В ASP.NET MVC 2 Идентичность, Вы можете получить имя текущего пользователя с помощью:

var username = System.Web.HttpContext.Current.User.Identity.Name; 
1

Мы можем использовать следующий код, чтобы получить текущий зарегистрированный пользователь в ASP.Net MVC:

var user= System.Web.HttpContext.Current.User.Identity.GetUserName(); 

Также

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName' 

Environment.UserName - Will Display format : 'Username' 
Смежные вопросы