Как получить текущего пользователя в ASP.NET MVC

в модели форм я использовал, чтобы получить текущего зарегистрированного пользователя:

Page.CurrentUser

Как получить текущего пользователя внутри класса контроллера в ASP.NET MVC?

19 ответов


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


Я нашел это User строительство, то есть User.Identity.Name или User.IsInRole("Administrator").


попробовать HttpContext.Current.User.

Public Shared Свойство Current () Как Система.Сеть.Свойство HttpContext
члены системы.Сеть.Свойство HttpContext

резюме:
Возвращает или задает систему.Сеть.Объект HttpContext для текущего HTTP-запроса.

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


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

System.Web.HttpContext.Current.User.Identity.Name

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

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

Я использую:

Membership.GetUser().UserName

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


вход в систему имя пользователя:System.Web.HttpContext.Current.User.Identity.Name


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

WebSecurity.CurrentUserId

после добавления оператора using

using System.Web.Security;

имя пользователя:

User.Identity.Name

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

using Microsoft.AspNet.Identity;

таким образом, вы можете получить непосредственно идентификатор пользователя:

User.Identity.GetUserId();

эта страница может быть то, что ты ищешь:
Использование Страницы.Пользователь.Личность.Имя в MVC3

вам просто нужно User.Identity.Name.


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

это приведет к текущему зарегистрированному пользователю Windows.


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


Если вы находитесь внутри страницы входа в систему, например, в событии LoginUser_LoggedIn Current.Пользователь.Личность.Name вернет пустое значение, поэтому вы должны использовать yourLoginControlName.Свойство username.

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

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

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));

если вы работаете в Active Directory в интрасети, вот несколько советов:

(Windows Server 2012)

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

как получить текущего зарегистрированного пользователя в active directory, когда ваш 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...

вы должны обернуть любые вызовы, имеющие отношение к "контексту active directory" в следующем, чтобы он действовал как среда размещения для получения информации об объявлении:

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

вы должны иметь impersonate значение true в файле web.config:

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

вы должны иметь проверку подлинности Windows в интернете.config:

<authentication mode="Windows" />

мы можем использовать следующий код для получения текущего зарегистрированного пользователя в 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'

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

Request.LogonUserIdentity.Name;

в Asp.net личность в MVC 2,Вы можете получить текущее имя пользователя:

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