Come ottenere l'utente corrente in ASP.NET MVC
-
06-07-2019 - |
Domanda
In un modello di moduli, ero solito ottenere l'attuale utente connesso da:
Page.CurrentUser
Come posso ottenere l'utente corrente all'interno di una classe controller in ASP.NET MVC?
Soluzione
Se è necessario richiamare l'utente dal controller, utilizzare la proprietà User
del controller. Se ne hai bisogno dalla vista, popolerei ciò di cui hai specificamente bisogno in ViewData
, o potresti semplicemente chiamare Utente poiché penso che sia una proprietà di ViewPage
.
Altri suggerimenti
Ho scoperto che User
funziona, ovvero User.Identity.Name
o User.IsInRole (" Administrator ")
.
Prova HttpContext.Current.User
.
Proprietà pubblica condivisa corrente () As System.Web.HttpContext
Membro di System.Web.HttpContextSommario:
Ottiene o imposta l'oggetto System.Web.HttpContext per la richiesta HTTP corrente.Valori di ritorno:
System.Web.HttpContext per l'attuale Richiesta HTTP
È possibile ottenere il nome dell'utente in ASP.NET MVC4 in questo modo:
System.Web.HttpContext.Current.User.Identity.Name
Mi rendo conto che questo è davvero vecchio, ma ho appena iniziato con ASP.NET MVC, quindi ho pensato di inserire i miei due centesimi:
-
Request.IsAuthenticated
ti dice se l'utente è autenticato. -
Page.User.Identity
ti dà l'identità dell'utente che ha effettuato l'accesso.
Uso:
Membership.GetUser().UserName
Non sono sicuro che funzionerà in ASP.NET MVC, ma vale la pena provare :)
nome utente registrato: System.Web.HttpContext.Current.User.Identity.Name
Al fine di fare riferimento a un ID utente creato utilizzando un'autenticazione semplice integrata in ASP.NET MVC 4 in un controller per scopi di filtro (il che è utile se si utilizza prima il database e Entity Framework 5 per generare i collegamenti in codice e le tabelle sono strutturati in modo tale da utilizzare una chiave esterna per userID), è possibile utilizzare
WebSecurity.CurrentUserId
dopo aver aggiunto un'istruzione using
using System.Web.Security;
Nome utente con:
User.Identity.Name
Ma se hai bisogno di ottenere solo l'ID, puoi usare:
using Microsoft.AspNet.Identity;
Quindi, puoi ottenere direttamente l'ID utente:
User.Identity.GetUserId();
Questa pagina potrebbe essere quello che stai cercando:
Uso di Page.User.Identity.Name in MVC3
Hai solo bisogno di User.Identity.Name
.
Usa System.Security.Principal.WindowsIdentity.GetCurrent (). Nome
.
Verrà visualizzato l'utente di Windows attualmente connesso.
Possiamo usare il seguente codice per ottenere l'utente attualmente connesso in ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
Anche
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Per quello che vale, in ASP.NET MVC 3 puoi semplicemente usare Utente che restituisce l'utente per la richiesta corrente.
Se ti trovi all'interno della tua pagina di accesso, ad esempio LoginUser_LoggedIn, Current.User.Identity.Name restituirà un valore vuoto, quindi devi utilizzare la proprietàLoginControlName.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));
Se ti capita di lavorare in Active Directory su una rete Intranet, ecco alcuni suggerimenti:
(Windows Server 2012)
L'esecuzione di tutto ciò che comunica con AD su un server Web richiede un sacco di cambiamenti e pazienza. Poiché quando viene eseguito su un server Web rispetto a IIS / IIS Express locale, viene eseguito nell'identità dell'AppPool, quindi è necessario configurarlo per impersonare chiunque acceda al sito.
Come ottenere l'utente attualmente connesso in una directory attiva quando l'applicazione ASP.NET MVC è in esecuzione su un server Web all'interno della rete:
// 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...
Devi racchiudere tutte le chiamate che hanno a che fare con "contesto di directory attiva" nel modo seguente, in modo che funga da ambiente di hosting per ottenere le informazioni AD:
using (HostingEnvironment.Impersonate()){ ... }
Devi anche avere impersonare
impostato su true nel tuo web.config:
<system.web>
<identity impersonate="true" />
È necessario disporre dell'autenticazione di Windows attiva in web.config:
<authentication mode="Windows" />
Puoi usare il seguente codice:
Request.LogonUserIdentity.Name;
In Asp.net Mvc Identity 2, è possibile ottenere il nome utente corrente tramite:
var username = System.Web.HttpContext.Current.User.Identity.Name;
In Gestione IIS, in Autenticazione, disabilitare: 1) Autenticazione anonima 2) Autenticazione moduli
Quindi aggiungere quanto segue al controller, per gestire i test rispetto alla distribuzione del server:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;