En un modelo de formularios, solía obtener el usuario registrado actualmente por:
Page.CurrentUser
¿Cómo consigo al usuario actual dentro de una clase de controlador en ASP.NET MVC?
En un modelo de formularios, solía obtener el usuario registrado actualmente por:
Page.CurrentUser
¿Cómo consigo al usuario actual dentro de una clase de controlador en ASP.NET MVC?
Respuestas:
Si necesita obtener el usuario desde el controlador, use la User
propiedad del controlador. Si lo necesita desde la vista, llenaría lo que necesita específicamente en el ViewData
, o simplemente podría llamar a Usuario, ya que creo que es una propiedad de ViewPage
.
Descubrí que User
funciona, es decir, User.Identity.Name
o User.IsInRole("Administrator")
.
Imports System.Web
y calificará aún más HttpContext.Current.User.Identity.Name
, o calificará directamente usando la sintaxis completa:System.Web.HttpContext.Current.User.Identity.Name
Tratar HttpContext.Current.User
.
Public Shared Property Current () Como System.Web.HttpContext
Miembro de System.Web.HttpContextResumen:
Obtiene o establece el objeto System.Web.HttpContext para la solicitud HTTP actual.Valores devueltos:
El System.Web.HttpContext para la solicitud HTTP actual
Puede obtener el nombre del usuario en ASP.NET MVC4 de esta manera:
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
, le sugiero que haga una llamada absoluta como esta System.Web.HttpContext.Current.User.Identity.Name
,.
Yo suelo:
Membership.GetUser().UserName
No estoy seguro de que esto funcione en ASP.NET MVC, pero vale la pena intentarlo :)
Para hacer referencia a una ID de usuario creada usando una autenticación simple integrada en ASP.NET MVC 4 en un controlador para fines de filtrado (lo cual es útil si está utilizando primero la base de datos y Entity Framework 5 para generar enlaces de código primero y sus tablas están estructuradas de modo que que se usa una clave externa para el ID de usuario), puede usar
WebSecurity.CurrentUserId
una vez que agregue una declaración de uso
using System.Web.Security;
System.Security.Principal.WindowsIdentity.GetCurrent().Name
funciona en MVC 5
. Sin embargo, eso muestra el nombre de dominio con el nombre de usuario. es decir, dominio \ nombre de usuario
Podemos usar el siguiente código para obtener el usuario conectado actualmente en ASP.Net MVC:
var user= System.Web.HttpContext.Current.User.Identity.GetUserName();
también
var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; //will give 'Domain//UserName'
Environment.UserName - Will Display format : 'Username'
Nombre de usuario con:
User.Identity.Name
Pero si necesita obtener solo la identificación, puede usar:
using Microsoft.AspNet.Identity;
Entonces, puede obtener directamente la ID de usuario:
User.Identity.GetUserId();
Esta página podría ser lo que está buscando:
Usar Page.User.Identity.Name en MVC3
Sólo se necesita User.Identity.Name
.
Uso System.Security.Principal.WindowsIdentity.GetCurrent().Name
.
Esto obtendrá el usuario actual de Windows conectado.
Si está dentro de su página de inicio de sesión, en el evento LoginUser_LoggedIn, por ejemplo, Current.User.Identity.Name devolverá un valor vacío, por lo que debe usar la propiedad yourLoginControlName.UserName.
MembershipUser u = Membership.GetUser(LoginUser.UserName);
Puedes usar el siguiente código:
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));
Si está trabajando en Active Directory en una intranet, aquí hay algunos consejos:
(Windows Server 2012)
Ejecutar cualquier cosa que hable con AD en un servidor web requiere muchos cambios y paciencia. Dado que cuando se ejecuta en un servidor web frente a IIS / IIS Express local, se ejecuta en la identidad del AppPool, por lo que debe configurarlo para suplantar a quien visita el sitio.
Cómo obtener el usuario con sesión iniciada actual en un directorio activo cuando su aplicación ASP.NET MVC se ejecuta en un servidor web dentro de la red:
// 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...
Debe ajustar las llamadas que tengan que ver con el 'contexto de directorio activo' a continuación para que actúe como el entorno de alojamiento para obtener la información de AD:
using (HostingEnvironment.Impersonate()){ ... }
También debe haber impersonate
establecido en verdadero en su web.config:
<system.web>
<identity impersonate="true" />
Debe tener la autenticación de Windows activada en web.config:
<authentication mode="Windows" />
En Asp.net Mvc Identity 2, puede obtener el nombre de usuario actual al:
var username = System.Web.HttpContext.Current.User.Identity.Name;
En el Administrador de IIS, en Autenticación, deshabilite: 1) Autenticación anónima 2) Autenticación de formularios
Luego agregue lo siguiente a su controlador, para manejar las pruebas versus la implementación del servidor:
string sUserName = null;
string url = Request.Url.ToString();
if (url.Contains("localhost"))
sUserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
else
sUserName = User.Identity.Name;