У моделі форм я використовував для отримання поточного користувача, який увійшов у систему:
Page.CurrentUser
Як отримати поточного користувача в клас контролера в ASP.NET MVC?
У моделі форм я використовував для отримання поточного користувача, який увійшов у систему:
Page.CurrentUser
Як отримати поточного користувача в клас контролера в ASP.NET MVC?
Відповіді:
Якщо вам потрібно отримати користувача зсередини контролера, використовуйте User
властивість Controller. Якщо вам це потрібно з подання, я б заповнив те, що вам конкретно потрібно ViewData
, або ви можете просто зателефонувати користувачеві, оскільки я думаю, що це властивість ViewPage
.
Я виявив, що User
працює, тобто User.Identity.Name
або User.IsInRole("Administrator")
.
Imports System.Web
далі кваліфікуватися з HttpContext.Current.User.Identity.Name
, або безпосередньо кваліфікуватися, використовуючи повний синтаксис:System.Web.HttpContext.Current.User.Identity.Name
Спробуйте HttpContext.Current.User
.
Публічна спільна власність власності () як System.Web.HttpContext
Член системи System.Web.HttpContextПідсумок:
Отримує або встановлює об'єкт System.Web.HttpContext для поточного запиту HTTP.Повернені значення:
System.Web.HttpContext для поточного запиту HTTP
Ви можете отримати ім'я користувача в ASP.NET MVC4 так:
System.Web.HttpContext.Current.User.Identity.Name
'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found
, я б запропонував зробити такий абсолютний дзвінок, як цей System.Web.HttpContext.Current.User.Identity.Name
.
Я використовую:
Membership.GetUser().UserName
Я не впевнений, що це буде працювати в ASP.NET MVC, але це варто зняти :)
З метою посилання на ідентифікатор користувача, створений за допомогою простої аутентифікації, вбудованої в ASP.NET MVC 4 в контролері для цілей фільтрації (що корисно, якщо ви використовуєте базу даних спочатку та Entity Framework 5 для генерації прив'язок перших кодів, а ваші таблиці структуровані так що використовується іноземний ключ до userID), ви можете використовувати
WebSecurity.CurrentUserId
як тільки ви додасте використовувальний оператор
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Працює лише в MVC 5
. Однак це підтягує доменне ім’я з ім'ям користувача. тобто домен \ ім'я користувача
Ми можемо використовувати наступний код для отримання поточного входу Користувача в 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'
Ім'я користувача з:
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.
Якщо ви перебуваєте на своїй сторінці входу, наприклад, у події LoginUser_LoggedIn, Current.User.Identity.Name поверне порожнє значення, тому вам доведеться використовувати властивістьLoginControlName.UserName.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Ви можете використовувати наступний код:
Request.LogonUserIdentity.Name;
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()){ ... }
Ви також маєте impersonate
встановити значення true у своєму web.config:
<system.web>
<identity impersonate="true" />
Потрібно активувати автентифікацію Windows у веб.config:
<authentication mode="Windows" />
У 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;