W modelu formularzy uzywałem bieżącego zalogowanego użytkownika poprzez:
Page.CurrentUser
Jak uzyskać bieżącego użytkownika w klasie kontrolera w ASP.NET MVC?
W modelu formularzy uzywałem bieżącego zalogowanego użytkownika poprzez:
Page.CurrentUser
Jak uzyskać bieżącego użytkownika w klasie kontrolera w ASP.NET MVC?
Odpowiedzi:
Jeśli chcesz uzyskać użytkownika z poziomu kontrolera, skorzystaj z User
właściwości kontrolera. Jeśli potrzebujesz tego z widoku, wypełniłbym to, czego konkretnie potrzebujesz ViewData
, lub możesz po prostu zadzwonić do użytkownika, ponieważ uważam, że jest to właściwość ViewPage
.
Znalazłem, że User
działa, to znaczy, User.Identity.Name
lub User.IsInRole("Administrator")
.
Imports System.Web
dalej się kwalifikować HttpContext.Current.User.Identity.Name
, albo bezpośrednio zakwalifikować, korzystając z pełnej składni:System.Web.HttpContext.Current.User.Identity.Name
Spróbować HttpContext.Current.User
.
Public Shared Property Current () As System.Web.HttpContext
Członek System.Web.HttpContextPodsumowanie:
Pobiera lub ustawia obiekt System.Web.HttpContext dla bieżącego żądania HTTP.Zwracane wartości:
System.Web.HttpContext dla bieżącego żądania HTTP
Możesz uzyskać nazwę użytkownika w ASP.NET MVC4 w następujący sposób:
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
, chciałbym zaproponować dokonanie bezwzględnej takiego połączenia, System.Web.HttpContext.Current.User.Identity.Name
.
Używam:
Membership.GetUser().UserName
Nie jestem pewien, czy to zadziała w ASP.NET MVC, ale warto spróbować :)
Aby odwołać się do identyfikatora użytkownika utworzonego przy użyciu prostego uwierzytelniania wbudowanego w ASP.NET MVC 4 w kontrolerze do celów filtrowania (co jest pomocne, jeśli najpierw używasz bazy danych i Entity Framework 5 do generowania powiązań z kodem, a tabele mają taką strukturę) że używany jest klucz obcy do ID użytkownika), możesz użyć
WebSecurity.CurrentUserId
po dodaniu instrukcji using
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Działa tylko w MVC 5
. Jednak to podnosi nazwę domeny z nazwą użytkownika. tzn. domena \ nazwa użytkownika
Możemy użyć następującego kodu, aby uzyskać bieżącego zalogowanego użytkownika w ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Również
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Nazwa użytkownika z:
User.Identity.Name
Ale jeśli potrzebujesz tylko identyfikatora, możesz użyć:
using Microsoft.AspNet.Identity;
Możesz więc uzyskać bezpośrednio identyfikator użytkownika:
User.Identity.GetUserId();
Ta strona może być tym, czego szukasz:
Korzystanie z Page.User.Identity.Name w MVC3
Po prostu potrzebujesz User.Identity.Name
.
Zastosowanie System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Spowoduje to, że bieżący zalogowany użytkownik systemu Windows.
Jeśli znajdujesz się na stronie logowania, na przykład w zdarzeniu LoginUser_LoggedIn, Current.User.Identity.Name zwróci pustą wartość, więc musisz użyć swojej właściwościLoginControlName.UserName.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Możesz użyć następującego kodu:
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));
Jeśli akurat pracujesz w usłudze Active Directory w intranecie, oto kilka wskazówek:
(Windows Server 2012)
Uruchamianie czegokolwiek, co komunikuje się z AD na serwerze WWW, wymaga wielu zmian i cierpliwości. Ponieważ podczas uruchamiania na serwerze sieciowym kontra lokalny IIS / IIS Express działa w tożsamości AppPool, więc musisz go skonfigurować, aby podszywał się pod każdego, kto wejdzie na stronę.
Jak uzyskać bieżącego zalogowanego użytkownika w aktywnym katalogu, gdy aplikacja ASP.NET MVC działa na serwerze sieciowym w sieci:
// 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...
Musisz zawrzeć wszystkie wywołania związane z „kontekstem katalogu aktywnego” w następujący sposób, aby działało ono jako środowisko hostingowe, aby uzyskać informacje AD:
using (HostingEnvironment.Impersonate()){ ... }
Musisz także impersonate
ustawić wartość true w swoim pliku web.config:
<system.web>
<identity impersonate="true" />
Musisz mieć uwierzytelnianie systemu Windows w pliku web.config:
<authentication mode="Windows" />
W Asp.net Mvc Identity 2 możesz uzyskać bieżącą nazwę użytkownika poprzez:
var username = System.Web.HttpContext.Current.User.Identity.Name;
W Menedżerze IIS w obszarze Uwierzytelnianie wyłącz: 1) Uwierzytelnianie anonimowe 2) Uwierzytelnianie formularzy
Następnie dodaj do kontrolera następujące elementy, aby obsłużyć testowanie i wdrożenie serwera:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;