Вопрос

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

Page.CurrentUser

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

Это было полезно?

Решение

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

Другие советы

Я обнаружил, что Пользователь работает, то есть User.Identity.Name или User.IsInRole (" Администратор ") .

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

Общедоступное общее свойство Current() Как System.Web.HttpContext
Участник System.Web.HttpContext

Краткие сведения:
Получает или устанавливает объект System.Web.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 в контроллере для целей фильтрации (это полезно, если вы сначала используете базу данных и Entity Framework 5 для генерации привязок кода и ваших таблиц структурированы так, что используется внешний ключ к идентификатору пользователя), вы можете использовать

WebSecurity.CurrentUserId

как только вы добавите оператор использования

using System.Web.Security;

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

User.Identity.Name

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

using Microsoft.AspNet.Identity;

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

User.Identity.GetUserId();

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

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

Используйте System.Security.Principal.WindowsIdentity.GetCurrent (). Name .

Это позволит получить текущего пользователя 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'

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

Если вы находитесь на своей странице входа в систему, например в событии LoginUser_LoggedIn, Current.User.Identity.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, поэтому вам нужно настроить его так, чтобы он выдавал себя за любого, кто посещает сайт.

Как получить текущего вошедшего в систему пользователя в активном каталоге, когда ваше приложение 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" />

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

Request.LogonUserIdentity.Name;

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

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

В диспетчере 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top