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 Userwł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 Userdziała, to znaczy, User.Identity.Namelub User.IsInRole("Administrator").
Imports System.Webdalej 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().NameDział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 impersonateustawić 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;