In un modello di moduli, ho usato per ottenere l'utente che ha effettuato l'accesso:
Page.CurrentUser
Come posso ottenere l'utente corrente all'interno di una classe controller in ASP.NET MVC?
In un modello di moduli, ho usato per ottenere l'utente che ha effettuato l'accesso:
Page.CurrentUser
Come posso ottenere l'utente corrente all'interno di una classe controller in ASP.NET MVC?
Risposte:
Se è necessario richiamare l'utente dal controller, utilizzare la User
proprietà del controller. Se ne hai bisogno dal punto di vista, popolerei ciò di cui hai specificamente bisogno in ViewData
, o potresti semplicemente chiamare Utente come penso che sia una proprietà di ViewPage
.
Ho scoperto che User
funziona, cioè User.Identity.Name
o User.IsInRole("Administrator")
.
Imports System.Web
qualificarti ulteriormente con HttpContext.Current.User.Identity.Name
, o qualificarti direttamente usando la sintassi completa:System.Web.HttpContext.Current.User.Identity.Name
Prova HttpContext.Current.User
.
Proprietà condivisa pubblica Current () Come System.Web.HttpContext
Membro di System.Web.HttpContextRiepilogo:
ottiene o imposta l'oggetto System.Web.HttpContext per la richiesta HTTP corrente.Valori di ritorno:
System.Web.HttpContext per la richiesta HTTP corrente
È possibile ottenere il nome dell'utente in ASP.NET MVC4 in questo modo:
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
, suggerirei di effettuare una chiamata assoluta come questa System.Web.HttpContext.Current.User.Identity.Name
,.
Io uso:
Membership.GetUser().UserName
Non sono sicuro che funzionerà in ASP.NET MVC, ma vale la pena provare :)
Per fare riferimento a un ID utente creato utilizzando un'autenticazione semplice integrata in ASP.NET MVC 4 in un controller per scopi di filtraggio (che è utile se si utilizza prima il database e Entity Framework 5 per generare associazioni in codice e le tabelle sono strutturate in modo tale che viene utilizzata una chiave esterna per userID), è possibile utilizzare
WebSecurity.CurrentUserId
una volta aggiunta un'istruzione using
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
Funziona solo in MVC 5
. Tuttavia, questo richiama il nome di dominio con il nome utente. cioè dominio \ nome utente
Possiamo utilizzare 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'
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 ciò che stai cercando:
utilizzando Page.User.Identity.Name in MVC3
Hai solo bisogno User.Identity.Name
.
Uso System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Ciò otterrà l'utente di Windows attualmente connesso.
Puoi usare il seguente codice:
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));
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. Dal momento che quando è in esecuzione 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...
È necessario racchiudere tutte le chiamate che hanno a che fare con "contesto di directory attiva" di seguito, in modo che funga da ambiente di hosting per ottenere le informazioni AD:
using (HostingEnvironment.Impersonate()){ ... }
Devi anche aver impersonate
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" />
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;