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?

È stato utile?

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.HttpContext

     

Sommario:
  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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top