Как получить текущего пользователя в ASP.NET MVC - PullRequest
258 голосов
/ 05 ноября 2008

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

Page.CurrentUser

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

Ответы [ 20 ]

5 голосов
/ 13 ноября 2011

Эта страница может быть тем, что вы ищете:
Использование Page.User.Identity.Name в MVC3

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

4 голосов
/ 24 января 2018

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

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

4 голосов
/ 10 ноября 2011

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

MembershipUser u = Membership.GetUser(LoginUser.UserName);
3 голосов
/ 26 апреля 2011
IPrincipal currentUser = HttpContext.Current.User;
bool writeEnable = currentUser.IsInRole("Administrator") ||
        ...
                   currentUser.IsInRole("Operator");
2 голосов
/ 14 августа 2017

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

Request.LogonUserIdentity.Name;
2 голосов
/ 22 января 2016

Если вы работаете в 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()){ ... }

В вашем web.config также должно быть установлено значение impersonate true:

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

У вас должна быть включена аутентификация Windows в web.config:

<authentication mode="Windows" />
2 голосов
/ 24 июня 2015
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));
1 голос
/ 29 сентября 2017

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

var username = System.Web.HttpContext.Current.User.Identity.Name;
0 голосов
/ 01 мая 2019

В диспетчере IIS под Аутентификацией отключите: 1) анонимная аутентификация 2) Аутентификация по формам

Затем добавьте следующее к своему контроллеру для обработки тестирования по сравнению с развертыванием сервера:

string sUserName = null;
string url = Request.Url.ToString();

if (url.Contains("localhost"))
  sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
  sUserName = User.Identity.Name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...